まず、プロセスを見てみましょう:
プロセスの原理:
1. コードを通じて access_token を取得し、認可を取得し、ユーザーの情報 (ユーザー u_id を含む) を取得します (この u_id は、サードパーティでは sina_id と呼ばれます) 2. サードパーティのログイン テーブルにクエリを実行します。ユーザー sina_id が存在しない場合は、2 つの状況が考えられます。1 つは、ユーザーがプラットフォーム上にすでにアカウントを持っていることです。この場合、プラットフォームのユーザー ID (例: プラットフォームのユーザー テーブルは user_reg) をサードパーティのログイン テーブル (Third_login テーブルなど) にバインドして、顧客がログインできるようにする必要があります。 : ユーザーはプラットフォームにアカウントを持っていないため、登録ページにジャンプして、バインドするためにサードパーティのログイン テーブルに書き込まれます。
3. ユーザーの場合は、サードパーティのログイン テーブルをクエリします。 sina_id が存在する場合は、ユーザー テーブル (user_reg) をクエリします。メールボックスがアクティブ化されていない場合は、ユーザーは自分の電子メールにアクセスしてアカウントをアクティブ化するように求められます。
以下の手順を詳しく説明します:
App Key: 1428003339
App Sercet: f1c6177a38b39f764c76a1690720a6dc
コールバック アドレス: http://test.com/callback.php
注意: 申請後、Sina アカウントは開発中のデバッグに使用できます。他のアカウントはログインして情報を返すことができません。開発前に公式サイトで開発プロセスを確認するのが一番重要です。アイデアが明確であれば、あとはコードを使用して必要なものを実現するだけです。
ステップ 2: SDK をダウンロード、php バージョンをダウンロード、ダウンロード アドレス (公式 Web サイト): http://code.google.com/p/libweibo/downloads/list、ダウンロードされたファイルは 5 つあり、そのうちの 1 つは saetv2 です。 ex .class.php、必要なのはこのファイルだけです。
ステップ 3: コード
1。サードパーティのログイン情報を保存するためのサードパーティのログイン テーブルを作成します (Sina は u_id、QQ は openid、どちらも一意であり、ユーザーの識別に使用されます。これに基づいて保存します)。
2.
コードは次のとおりです。
コードをコピーします
oauth 認証クラス、ダウンロードした saetv2.ex.class.php ファイルをアプリケーション/ライブラリにコピーします。
注: これは非常に重要なクラスです。ログイン、認証、およびユーザー情報の取得はすべてこのクラスのメソッドを使用します。これがないと、アプリケーション/ライブラリにそのまま貼り付けることができません。
4.
Sina Weibo ログイン クラスを作成し (QQ ログインも利用可能です。私の QQ ログインもここにパッケージ化されています。Sina ログイン インターフェイスだけを作成しても影響はありません)、application/ の下にファイル third_login_model.php を作成します。モデル 、コード:
public function binding_third($datas) {
if (!is_array($datas)) show_error ('wrong param');
if($datas['sina_id']==0) && $datas['qq_id']==0) return;
$resa ='';
$resb ='';
$resa = $this->select_third(array("user_id"=>$datas ['user_id']));
$temp =array(
"user_id"=>$datas['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){
$resb = $this->db->update($this->third, $temp,array("user_id"=>$datas['user_id']));
}else{
$resb = $this->db->insert($this->third,$temp);
}
if($resb) {
$this->session-& gt;unset_userdata ('sina_id');//注销
$this->session->unset_userdata('qq_id');//注销
}
return $resb;
}
}
保存
説明: このコードはエントリ ファイルcallback.php によって転送され、7 番目のステップには詳細なコードが含まれています。 。
5.
复制代価代価如下:
/**
* Description of index
* @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 function index() {
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'];//code值由入口文件callback.php传过来
$arr =array();
$arr = $this->third->sina_callback($code);//通过授权并获取用户信息(包括u_id)
$res = $this->third->select_third(array("sina_id"=>$arr['id']));
if(!empty($res)){//用户已有帐号记录,先判断帐号是否激活
$user_info = $this->user_reg->user_detect(array("id"=>$res['user_id']));//查询用户表邮箱状态,user_detect方法就是查询用户信息的方法,上面也说了,login_model.php这个类本贴不提供,需要大家自己去封装。
if($user_info['status']){//根据status的状态判断用户帐号是否激活,user_reg表中的字段status,1为未激活,0为已激活
echo "<script>alert('您的账号未激活,请去邮箱激活!');location='/login/index';</script>";die();
}
$datas = $this->third->select_user_name($arr['id']);//激活后,把信息写入用户表和第三方登录表
$uname = $datas['username'];//username,password都是user_reg表的字段,user_reg数据表的构建本帖也不提供,因为每个项目都不一样,需要根据实际项目来
$password = $datas['password'];
$this->load->model("login_model","login");
$this->login->validation($uname,$password);//validation方法是登录的主要方法,这里主要是在登录的时候,将用户信息写入第三方登录表,下面仅提供写入第三方登录表的代码
echo "<script>alert('登录成功!');location='/user_center'</script>";die();
}else{//用户第三方表没有记录,询问用户是否在平台有过帐号,没有跳转注册,有跳转登录
$this->session->set_userdata('sina_id',$arr['id']);
echo "<script>if(!confirm('是否在平台注册过用户?')){location='/register/index'}else{location='/login'};</script>";
}
}
" public function login_validation(){
" //サードパーティのログイン ユーザー ID、sina_id、qq_id の追加と変更を記録します
" "user_id" => "sina_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) // バインディング
}
//保存
;
class Register は CI_Controller を拡張します {
パブリック関数 __construct() {
"sina_id" => $this->session->userdata('sina_id'),
"qq_id " => ;$this->session-> ;userdata('qq_id '),
);
保存
6.
ファイルレイアウトを表示するSina Weiboログインボタン、アプリケーション/ビューの下にindex.phpファイルを作成、コード:
コードをコピーします
コードは次のとおりです:
/*
* このライセンス ヘッダーを変更するには、プロジェクト プロパティで [ライセンス ヘッダー] を選択します。
* このテンプレート ファイルを変更するには、[ツール] テンプレートを選択します
* エディタでテンプレートを開きます。
*/
//Sina Weibo ログイン コールバックエントリファイルを作成し、ログイン/コールバックメソッドにパスを転送し、コード値
$code ='';
$url = '';
$str ='';
$code = $_REQUEST['code '] ;
$url = "/ログイン/コールバック";
$str = "
"
http://www.bkjia.com/PHPjc/777637.html
www.bkjia.com
本当