ホームページ  >  記事  >  php教程  >  phpcms V9 は QQ ログイン OAuth2.0 を実装します

phpcms V9 は QQ ログイン OAuth2.0 を実装します

WBOY
WBOYオリジナル
2016-06-21 08:49:22840ブラウズ

phpcmsV9 で使用される QQ ログインは依然として OAuth1.0 ですが、現在 Tencent は OAuth1.0 を使用する Web サイトをレビューしていません。これは、PC を使用するウェブマスターにとって大きな落とし穴です。 phpcms フォーラムのクラスメートが作成したプラグインを修正した後、QQ ログインは完全に実装され、まだバグは見つかっていません。

実装手順:

①phpcmsmodulesmemberindex.phpファイルを開き、以下のコードを挿入する場所を見つけます(PCのデフォルトQQで直接ログインできます)。

  1. //QQ ログイン oAuth2.0

  2. ublic 関数 public_qq_login2(){

  3. $appid = pc_base::load_config('システム', 'qq_appid');

  4. $appkey = pc_base::load_config('システム', 'qq_appkey');

  5. $callback = pc_base::load_config('system', 'qq_callback');
  6. pc_base::load_app_class('qqOAuth2','',0);
  7. $info = new qqOAuth2($appid,$appkey,$callback);

  8. $this->_session_start();

  9. if (!isset($_GET['code'])){

  10. $info->redirect_to_login();

  11. }その他{

  12. $コード = $_GET['コード']

  13. $_SESSION['openid'] = $info->get_openid($code);//QQ openid 値を取得します

  14. if(!emptyempty($_SESSION['openid'])){

  15. $r = $this->db->get_one(array('connectid'=>$_SESSION['openid'],'from'=>'qq'));

  16. if(!emptyempty($r)){
  17. //QQ はデータベースにすでに存在するため、ログイン操作に直接進みます
  18. $パスワード = $r['パスワード']
  19. ;

  20. $this->_init_phpsso();
  21. $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);
  22. $userid = $r['userid']
  23. ;
  24. $グループID = $r['グループID']
  25. $ユーザー名 = $r['ユーザー名']
  26. $nickname = emptyempty($r['nickname']) $username : $r['nickname'];
  27. $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']),array('userid '=>$ユーザーID));

  28. if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');

  29. $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);

  30. $cookietime = $_cookietime + $_cookietime : 0;

  31. $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
  32. $phpcms_auth = sys_auth($userid."t".$password, 'ENCODE', $phpcms_auth_key);
  33. param::set_cookie('auth', $phpcms_auth, $cookietime);

  34. param::set_cookie('_userid', $userid, $cookietime);

  35. param::set_cookie('_username', $username, $cookietime);
  36. param::set_cookie('_groupid', $groupid, $cookietime);
  37. param::set_cookie('cookietime', $_cookietime, $cookietime);

  38. param::set_cookie('_nickname', $nickname, $cookietime);

  39. $forward = isset($_GET['forward']) && !emptyempty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index';
  40. showmessage(L('login_success').$synloginstr, $forward);
  41. }その他{

  42. //データベースに存在しないため、完全な情報ページに移動します。ページプリセットユーザー名 (QQ は UTF8 エンコードを返し、必要に応じてトランスコードします)

  43. $user = $info->get_user_info();

  44. $_SESSION['connectid'] = $_SESSION['openid']

    ;
  45. $_SESSION['from'] = 'qq';

  46. if(CHARSET != 'utf-8') {//エンコーディングを変換します

  47. $connect_username = iconv('utf-8', CHARSET, $user['nickname']);

  48. }
  49. include template('メンバー', '接続');
  50. }
  51. }
  52. }
  53. }
  54. ②添付のqqOAuth2.class.phpファイルをphpcmsmodulesmemberclassesフォルダに置きます。
③バックグラウンドで接続設定を見つけ、QQ 番号ログインのコールバック アドレスを http://php100.com/index.php?m=member&c=index&a=public_qq_login2 に変更します (私のドメイン名を独自の名前に変更します)

④ アプリIDとアプリキーを入力し、キャッシュを更新します。

⑤ phpmyadmin にログインし、v9_member テーブルの connectid フィールド (またはカスタム フィールド) を見つけ、タイプを「char(255)」に変更します。これは、phpcms のデフォルトが 15 桁であるためです。そこで、これを直接 255 に完全に変更しました。これにより、Tencent の他のサードパーティ Web サイトのアカウント (淘宝網、Alipay、Baidu、360 およびその他のサードパーティ アカウントなど) に関係なく、データ バインディングを完了できます。 (この記事は 7 月 27 日に追加され、ネチズン liuyang814 からメールでリマインドされました)

Sina Weibo と Tencent Weibo のコードは後でアップロードされます。 phpcms の周辺コードは非常に少ないため、オンラインで見つけることもできません。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。