ホームページ  >  記事  >  バックエンド開発  >  新浪微博ログインインターフェース(PHP版)_PHPチュートリアル

新浪微博ログインインターフェース(PHP版)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:29:21812ブラウズ

。機能実装: ログイン インターフェイスはリンクに正常にジャンプし、ユーザー情報 (最も重要な u_id を含む) を正常に取得し、ユーザーをローカル プラットフォームに接続し、ユーザーが正常にログインした後に情報を保存し、サードパーティのログインを設計します。ローカルデータベースのテーブル。つまり、インターフェース処理が完了する。 ほぼすべての重要なステップについてメモを付けて詳しく説明します。
まず、プロセスを見てみましょう:
プロセスの原理:
1. コードを通じて access_token を取得し、認可を取得し、ユーザーの情報 (ユーザー u_id を含む) を取得します (この u_id は と呼ばれます)後でサードパーティのログイン テーブルに sina_id を追加します)、そのテーブルは自分で構築する必要があります)
2. ユーザー sina_id が存在しない場合、2 つの状況が考えられます。1 つはユーザーです。この場合、プラットフォーム (例: プラットフォーム ユーザー テーブル: user_reg) は、ユーザー ID がサードパーティのログイン テーブル (例: third_login テーブル) にバインドされています。顧客はログインしています; 2: ユーザーはプラットフォームにアカウントを持っていないため、登録ページにジャンプして登録し、同時に登録すると、情報が uer_reg テーブルに書き込まれ、ユーザー sina_idバインドのためにサードパーティのログイン テーブルにも書き込まれます。
3. ユーザー sina_id が存在する場合はサードパーティのログイン テーブル (third_login) をクエリし、電子メール アドレスが存在する場合はユーザー テーブル (user_reg) をクエリします。アクティブ化されていない場合は、直接ログインするだけで、ユーザーは電子メール アドレスにアクセスしてアカウントをアクティブ化するように求められます。

詳細な手順から始めましょう:
ステップ 1: アプリキーとアプリシークレットを申請します 申請アドレス: http://open.weibo.com/ ウェブサイトをクリックして WEB にアクセスし、アクセスして申請します 合格すると、次のように App Key と App Secret を取得します:

App Key: 1428003339
App Sercet: f1c6177a38b39f764c76a1690720a6dcCallback address: http://test.com/callback.php

手順: 申請後、あなたの Sina アカウントは開発中のデバッグに使用できます。他のアカウントはログインして情報を返すことができません。開発前に公式サイトで開発プロセスを確認するのが最善です。プロセスが最も重要です。アイデアが明確であれば、あとはコードを使用して必要なものを実現するだけです。
ステップ 2:
SDK をダウンロード、php バージョンをダウンロード、ダウンロード アドレス (公式 Web サイト): http://code.google.com/p/libweibo/downloads/list、ダウンロードされたファイルは 5 つあります。これは saetv2.ex.class.php です。必要なのはこのファイルだけです。


ステップ 3: コード1. サードパーティのログイン情報を保存するためのサードパーティのログイン テーブルを作成します (Sina は u_id、QQ は openid、どちらも一意であり、ユーザーを識別するために使用されます)。これに基づいています):

CREATE TABLE IF NOT EXISTS `third_login` ( `user_id` INT(6) NOT NULL,
`sina_id` BIGINT(16) NULL,
`qq_id` varchar (64) NULL、
主キー (`user_id`)、
一意のインデックス`user_id_UNIQUE` (`user_id` ASC)、
INDEX `sina_id` (`sina_id` ASC)、
INDEX ` Index4` (` QQ_id` ASC))
エンジン = Myisam
デフォルト文字セット = UTF8
照合 = UTF8_BIN
コメント = 'サードパーティログインフォーム'

説明: プラットフォーム返品されたこれは、ユーザーの一意の識別子である u_id であり、user_id はプラットフォームのユーザー テーブル user_reg に関連付けられています。ここではテーブルを作成しません。推奨運用ツール 操作が簡単なphpmyadminとMySQL Workbenchがあります。
Sina ログイン インターフェースを作成するだけの場合は、qq_id フィールドを削除できます。


2. 設定ファイルを書き込み、アプリケーションの下に新しいファイル sina_conf.php を作成し、先ほど適用したアプリ キーとアプリ シークレットを書き込みます。コードは次のとおりです:

$ config["sina_conf "] = array(
"App_Key" => '1428003339',
"App_Secret" =>'f1c6177a38b39f764c76a1690720a6dc',
"WB_ CALLBACK_URL" => 'http:// test.com/callback .php'
);

3.oauth 認証クラスを保存し、ダウンロードした saetv2.ex.class.php ファイルを application/libraries にコピーします。

説明: これは非常に重要なクラスです。ログイン、認証、ユーザー情報の取得はすべてこのクラスのメソッドを使用します。これがないと、アプリケーション/ライブラリにそのまま貼り付けることができなくなります。
4. Sina Weibo ログイン クラスを記述し (QQ ログインも利用できます。ここでの QQ ログインもパッケージ化されています。Sina ログイン インターフェイスだけを作成しても影響しません)、ファイルを作成します。 application/models .php の下の third_login_model、コード:


/**

* third_login_model の説明
*サードパーティインターフェース認証、ログインモデル
* @author
*/
class third_login_model extends CI_Model{
//ここにコードを入れてください
private $sina=array( );
private $qq =array();
private $users ='';
private $third='';
public function __construct() {
parent::__construct( ) ; L include_once apppath. "/Saetv2.ex.class.php"; $ This- & GT; GT; 'Third_login'; // サードパーティのログインテーブル
’ s ’ s ’ s ’ s ’ s ‐ to db->'user_reg';
$this ->sina= $this->config->item("sina_conf"); **
* @uses: Sina Weibo ログイン
* @param:
* @return: $sina_url----ログインアドレス
*/
public function sina_login(){
$obj = new SaeTOAu thV2($this-> ;sina['App_Key'],$this->sina['App_Secret']) ;getAuthorizeURL( $this->sina['WB_CALLBACK_URL'] ); パブリック関数 sina_callback($code ) {O j = New Saetoauthv2 ($ this-> sina ['app_key'], $this-> sina ['app_secret']);
if (isset ($ code)) {
$keys = array();
$keys['code'] = $code;
$keys['redirect_uri'] = $this->sina['WB_CALLBACK_URL'];
try { $ Token = $ obj- & gt ; getaccessStoken ('code', $ key); // 認証を完了します} Catch (OAUTHEXCEPTION $ E) {
}
}
$c = new SaeTClientV2($this->sina['App_Key'], $this->sina['App_Secret'], $token['access_token']);
$ms =$c->home_timeline();
$uid_get = $c->get_uid();//获取u_id
$uid = $uid_get['uid'];
$ user_message = $c->show_user_by_id($uid);//获取用户情報
return $user_message;
}

/**
* @uses: サードパーティのログインテーブルをクエリします
* @param: $where
* @return: サードパーティのログインユーザーレコード結果セット
*/
パブリック関数 select_third( $where) {
$result = false;
$this->db->select();
$this->db->from($this->third);
$this->db->where($where);
$query = $this->db->get();
if($query){
$ result = $query->row_array();
}
return $result;
}

/*-
* @uses : sina---查询用户表和第三方登录表
* @param : $where
* @return : 第三方登录用户记录结果集
*/
public function select_user_name($where) {
$field =" user.id,user.password,user.username,utl.*";
$sql = "{$this->third} から {$field} を utl "
左結合 {$ として選択します。" this->users} を user.id=utl.user_id"
. " where utl.sina_id={$where}";
$query = $this->db->query($sql);
$result = $query->row_array();
return $result;
}

/**
*/
public function select_user_qqname($where) {
$field ="ユーザーID、ユーザーパスワード、ユーザー.username,utl.*";
$sql = "{$this->third} から {$field} を utl "
." でユーザーとして {$this->users} に参加しますuser.id=utl.user_id"
. " where utl.qq_id='{$where}'";
$query = $this->db->query($sql);
$result = $query->row_array();
return $result;
}

/**
* @uses : 将用户和三方登录表信息绑定

* @param : $datas
* @return :
*/
public function binding_third($datas) {
if (!is_array($datas)) show_error ( '間違ったパラメータ');
if($datas['sina_id']==0 && $datas['qq_id']==0) return;

$resa ='';
$resb ='';
$ resa = $ this-> select_third(array( "user_id" => $ datas ['user_id']); ['user_id'],
"sina_id"=>$resa['sina_id']!=0 ? $resa['sina_id'] : $datas['sina_id'],
"qq_id" => ; $resa['qq_id']!=0 ? $resa['qq_id'] : $datas['qq_id'],
);
if($resa){
$this ->db->update($this->third, $temp,array("user_id"=>$datas['user_id']));
}else{
$resb = $ this->db->insert($this->thirth,$temp);
}
if($resb) {
$this->session->unset_userdata('sina_ ID ');//注销
$this->session->unset_userdata('qq_id');//注销
}
return $resb;
}
}
保存
説明: このコードはエントリ文書callback.phpによって転送され、7番目のセッションに他の詳細コードが含まれています。

5. 書き込み登录制御器 アプリケーション/コントローラーの下で、構築login.php文件(名字你可自己取),代打:

/**

* インデックスの説明
* @author Victory

 */
class Login extends CI_Controller {

public function __construct() {
parent::__construct();
$this->load->model('login_model','login');//これは本项目的用户登录类,本贴不提供原代コード,異なる项目,要求要求に応じて自己封入可能
$this->load->model("third_login_model","third");
$this->load ->library('session');
}
public functionindex() {
header("content-type: text/html; charset=utf-8");
$ this->load->model("third_login_model","third");//加ダウンロード新浪登录接口类

$datas['sina_url'] = $this->third->sina_login(); //调用类中のsina_login方法
$this->load->view("index.php",$datas);//调取映像文件,并传入力文
}
public function callback(){
header("content-type: text/html; charset=utf-8");

$this->load->model("user_reg_model","user_reg) ");
$code = $_REQUEST['code'];//コード値はエントリ ファイル callback.php から渡されます$code = $ ($code);// 認証を通じてユーザー情報 (u_id を含む) を取得します
$ res = $this->third->select_third(array("sina_id"=>$arr['id']) );
if(!empty($res)){// ユーザーはすでにアカウント レコードを取得するには、まずアカウントがアクティブ化されているかどうかを確認します
=>$res['user_id']));//user_detect メソッドは、ユーザー情報をクエリするメソッドです。上で述べたように、login_model.php クラスはこの記事では提供されていないため、自分でカプセル化する必要があります。 U if ($ User_info ['STATUS']) {// ステータスの状態、つまり user_reg テーブルのフィールド status に従ってユーザー アカウントがアクティブ化されているかどうかを判断します。1 はアクティブ化されていない、0 はアクティブ化されています
echo " & lt; スクリプト & gt ;alert('アカウントが有効になっていません。メールで有効にしてください!');location='/login/index';";die();
-> ;third->select_user_name($arr['id']);//アクティブ化後、ユーザー テーブルとサードパーティのログイン テーブルに情報を書き込みます
$uname = $datas['username'];//ユーザー名とパスワードはどちらも user_reg テーブルのフィールドです。プロジェクトごとに異なるため、$password = $datas['password'] を決定する必要があるため、この投稿では user_reg データ テーブルの構築については説明しません。 ;
ここでの方法は、主にログイン時にサードパーティのログインテーブルにユーザー情報を書き込む方法です。以下はサードパーティのログインテーブルに書き込むコードのみを示します
echo "<script>alert ('ログイン成功!'); location ='/user_center'</script>";die();
}else{//ユーザーのサードパーティ テーブルにレコードがないため、ユーザーにプラットフォームでは、登録へのジャンプはありません。ログインへのジャンプがあります。 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 using, ){location='/ register/index'}else{location='/login'};";
/ /サードパーティのログイン ユーザー ID、sina_id、qq_id の追加と変更を記録 ; $this ->session- >userdata('sina_id'),
"qq_id" =>$this->session->userdata('qq_id'),
); If($ third_info['sina_id']|| $third_info['qq_id']) $this->third->binding_third($third_info) // バインディング
}
保存
;


     //在注册控制器里,用户信息写入user_reg表,同时也把sina_id写入third_login表,我这里只展示第三方登录接口用户id存入数据表的代码
class Register extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->library('session');
    }
    public function reg() {
          $haha =array(
                      "user_id" => $rs,
                      "sina_id" => $this->session->userdata('sina_id'),
                      "qq_id"   =>$this->session->userdata('qq_id'),
                      );
            if($haha['sina_id']||$haha['qq_id'])    $this->third->binding_third($haha);
    }
}
保存

6.视图文件布置新浪微博登录按钮,在application/view下建立index.php文件,代码:


   
    新浪微博登录接口


    





保存
説明: これは画像ボタンです。公式 Web サイトから画像をダウンロードできます。ダウンロード アドレス: http:// open.weibo.com/widget/loginbutton.php

7. コールバック アドレス
ファイルを設定する最初のステップで、コールバック アドレスが設定されました: http://test.com/callback.phpこのコールバックはどこに配置する必要がありますか? これは、index.php エントリと同じレベルに配置する必要があります。開始ディレクトリに新しいファイル callback.php を作成します。コード:


/*
* このライセンス ヘッダーを変更するには、プロジェクト プロパティで [ライセンス ヘッダー] を選択します。
* このテンプレート ファイルを変更するには、[ツール] | [テンプレート] を選択します
*そしてエディターでテンプレートを開きます。
*/
//Sina Weibo ログイン コールバック エントリ ファイル、パスをログイン/コールバック メソッドに転送し、コード値
$code ='' ;
$url = '';
$str ='';
$code = $_REQUEST['code'];
$url = "/login/callback"; = "




自動ジャンプ

";
$str .="
";
$str .="";
$str .="
getElementById('form').submit( ); アカウントログインのログインボタンをクリックすると、Weiboのログインページにジャンプします。 Sina Weibo のユーザー名とパスワードの入力を求められ、実行されます。さまざまな操作。具体的なプロセスについても上で述べました。
この投稿は参照のみを目的としており、商業的な範囲には関与しません。
転載したい場合は、出典と元のアドレスを明記してください、ありがとうございます!
何か間違っている点や改善できる点がある場合は、下のコメントでご指摘ください。ありがとうございます。


http://www.bkjia.com/PHPjc/777154.htmlwww.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/777154.html

技術記事 CI フレームワークでの Sina Weibo ログイン インターフェイスの完全版に関する注意: この投稿は CI フレームワークにのみ適しています。関数の実装: ログイン インターフェイスのジャンプ リンクが成功し、ユーザー情報 (最も重要な u_id を含む) が正常に取得されました。...


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