CI フレームワーク開発 Sina Weibo ログイン インターフェイス完全版ソース コード_PHP チュートリアル
まず、プロセスを見てみましょう:
プロセスの原理:
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、どちらも一意であり、ユーザーの識別に使用されます。これに基づいて保存します)。
`sina_id` BIGINT(16) NULL,
`qq_id ` varchar( 64) NULL,
PRIMARY KEY (`user_id`),
UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC),
INDEX `sina_id` (`sina_id` ASC),
INDEX `index4` (`qq_id` ASC))
ENGINE = MyISAM
デフォルト文字セット = utf8
COLLATE = utf8_bin
COMMENT = 'サードパーティログインフォーム'
2.
コードは次のとおりです。
コードをコピーします
"App_Secret" => ;'f1c6177a 38b39f764c76a1690720a6dc' ,
"WB_CALLBACK_URL" => 'http://test.com/callback.php'
);
保存
oauth 認証クラス、ダウンロードした saetv2.ex.class.php ファイルをアプリケーション/ライブラリにコピーします。
注: これは非常に重要なクラスです。ログイン、認証、およびユーザー情報の取得はすべてこのクラスのメソッドを使用します。これがないと、アプリケーション/ライブラリにそのまま貼り付けることができません。
4.
Sina Weibo ログイン クラスを作成し (QQ ログインも利用可能です。私の QQ ログインもここにパッケージ化されています。Sina ログイン インターフェイスだけを作成しても影響はありません)、application/ の下にファイル third_login_model.php を作成します。モデル 、コード:
/**
* 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();
// $this->l = DIRECTORY_SEPARATOR;
$this->load->database ();
$this->load->library('session');
include_once APPPATH."/libraries"."/saetv2.ex.class.php";
$this->third = $this-> db->'third_login';// 第三方登录表
$this->users = $this->db->'user_reg';//本项目用户表
$this->config-> ;load("sina_conf");
$this->sina= $this->config->item("sina_conf");
}
/**
* @uses: Sina Weibo ログイン
* @param:
* @return: $sina_url----ログインアドレス
*/
public function sina_login( ){
$obj = new SaeTOAuthV2($this->sina['App_Key'],$this->sina['App_Secret']);
$sina_url = $obj->getAuthorizeURL( $this-> sina['WB_CALLBACK_URL'] );
return $sina_url;
}
/**
* @uses: ログイン後、返されたコード値からトークンを取得し、認証を完了して、ユーザー情報を取得します
* @param: $code
* @return: $user_message--ユーザー情報
*/
public function sina_callback($code){
$obj = 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->getAccessToken( 'code', $keys ) ;// 授权
} 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;
}
/**
*/
public function 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 : 第三方登录用户记录结果集
*/
パブリック関数 select_user_name($ここで) {
$field ="user.id,user.password,user.username,utl.*";
$sql = "{$this->third} から {$field} を utl "
." として選択します。左は user.id=utl.user_id"
のユーザーとして {$this->users} に参加します。 " where utl.sina_id={$where}";
$query = $this->db->query($sql);
$result = $query->row_array();
return $result;
}
/**
*/
public function select_user_qqname($where) {
$field ="user.id,user.password,user.username,utl.*";
$sql = "select {$ field} から {$this->third} を utl "
." として、{$this->users} を user.id=utl.user_id"
に参加します。 " where utl.qq_id='{$where}'";
$query = $this->db->query($sql);
$result = $query->row_array();
return $result ;
}
/***/
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ファイルを作成、コード:
コードをコピーします
注: これは画像ボタンです。ダウンロードアドレス: http://open.weibo.com/widget/loginbutton.php
7.
コールバック アドレス
ステップ 1 でファイルを設定するとき、コールバック アドレスを設定します: http://test.com/callback.php では、この callback.php はどこに配置する必要がありますか?エントリindex.phpと同じレベルであり、アプリケーションとも同じレベルです。開始ディレクトリに新しいファイル callback.php を作成します。コード:
コードは次のとおりです:
/*
* このライセンス ヘッダーを変更するには、プロジェクト プロパティで [ライセンス ヘッダー] を選択します。
* このテンプレート ファイルを変更するには、[ツール] テンプレートを選択します
* エディタでテンプレートを開きます。
*/
//Sina Weibo ログイン コールバックエントリファイルを作成し、ログイン/コールバックメソッドにパスを転送し、コード値
$code ='';
$url = '';
$str ='';
$code = $_REQUEST['code '] ;
$url = "/ログイン/コールバック";
$str = "
"
"
"
" < /head>
";
$str .="
保存
この時点で、ブラウザを使用してindex.phpファイルにアクセスすると、Weiboアカウントでログインするためのログインボタンが表示されます。ボタンをクリックすると、Weiboログインページにジャンプし、アカウントの入力を求められます。 Sina Weibo のユーザー名とパスワード、彼は別の操作を実行します。具体的なプロセスについても上で述べました。
http://www.bkjia.com/PHPjc/777637.html
www.bkjia.com
本当
ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









パソコンを組み立てる際、設置作業は簡単ですが、誤ってCPUラジエーターの電源線をSYS_FANに差し込んでしまうなど、配線に問題が発生することが多く、ファンは回転しますが、ファンが回転しない場合があります。コンピュータの電源がオンになると、F1 エラー「CPUFanError」が発生し、CPU クーラーがインテリジェントに速度を調整できなくなります。コンピューターのマザーボード上の CPU_FAN、SYS_FAN、CHA_FAN、および CPU_OPT インターフェイスに関する一般的な知識を共有しましょう。コンピュータのマザーボード上の CPU_FAN、SYS_FAN、CHA_FAN、および CPU_OPT インターフェイスに関する一般科学 1. CPU_FANCPU_FAN は、CPU ラジエーター専用のインターフェイスであり、12V で動作します。

最新の効率的なプログラミング言語である Go 言語には、開発者が高品質で保守可能なコードを作成するのに役立つ豊富なプログラミング パラダイムと設計パターンがあります。この記事では、Go 言語の一般的なプログラミング パラダイムと設計パターンを紹介し、具体的なコード例を示します。 1. オブジェクト指向プログラミング Go 言語では、構造体とメソッドを使用してオブジェクト指向プログラミングを実装できます。構造を定義し、その構造にメソッドをバインドすることにより、データのカプセル化と動作バインディングのオブジェクト指向機能を実現できます。パッケージマイニ

PHP インターフェースの概要とその定義方法 PHP は、Web 開発で広く使用されているオープンソースのスクリプト言語であり、柔軟性があり、シンプルで強力です。 PHP では、インターフェイスは複数のクラス間で共通のメソッドを定義し、ポリモーフィズムを実現し、コードをより柔軟で再利用可能にするツールです。この記事では、PHP インターフェイスの概念とその定義方法を紹介し、その使用法を示す具体的なコード例を示します。 1. PHP インターフェイスの概念 インターフェイスはオブジェクト指向プログラミングにおいて重要な役割を果たし、クラス アプリケーションを定義します。

エラーの原因は Python にあり、Tornado で NotImplementedError() がスローされるのは、抽象メソッドまたはインターフェイスが実装されていないことが原因である可能性があります。これらのメソッドまたはインターフェイスは親クラスで宣言されますが、子クラスでは実装されません。サブクラスが適切に動作するには、これらのメソッドまたはインターフェイスを実装する必要があります。この問題を解決するには、親クラスで宣言した抽象メソッドやインターフェイスを子クラスに実装します。別のクラスから継承するクラスを使用していてこのエラーが発生した場合は、親クラスで宣言されたすべての抽象メソッドを子クラスに実装する必要があります。インターフェイスを使用していてこのエラーが発生した場合は、インターフェイスで宣言されているすべてのメソッドを、インターフェイスを実装するクラスに実装する必要があります。どちらかわからない場合は、

インターフェイスと抽象クラスは、分離と拡張性のためにデザイン パターンで使用されます。インターフェイスはメソッド シグネチャを定義し、抽象クラスは部分的な実装を提供し、サブクラスは未実装のメソッドを実装する必要があります。ストラテジ パターンでは、インターフェイスを使用してアルゴリズムを定義し、抽象クラスまたは具象クラスが実装を提供するため、アルゴリズムを動的に切り替えることができます。オブザーバー パターンでは、インターフェイスを使用してオブザーバーの動作を定義し、抽象クラスまたは具象クラスを使用して通知をサブスクライブおよびパブリッシュします。アダプター パターンでは、インターフェイスを使用して既存のクラスを適応させることができ、互換性のあるインターフェイスを実装できるため、元のコードとの対話が可能になります。

Huawei が発表した新しいオペレーティング システムとして、Hongmeng システムは業界で大きな波紋を引き起こしました。米国の禁止措置を受けてのファーウェイの新たな試みとして、紅夢システムには大きな期待と期待が寄せられている。最近、幸運にもHongmengシステムを搭載したHuaweiの携帯電話を入手したので、一定期間使用して実際にテストした後、Hongmengシステムの機能テストと使用体験を共有します。まず、Hongmeng システムのインターフェースと機能を見てみましょう。 Honmeng システムは全体的に Huawei 独自のデザインスタイルを採用しており、シンプル、明確、スムーズな操作性を備えています。デスクトップ上には、さまざまな

Java では、インターフェイスおよび抽象クラス内で内部クラスを定義できるため、コードの再利用とモジュール化に柔軟性が提供されます。インターフェイスの内部クラスは特定の関数を実装できますが、抽象クラスの内部クラスは一般的な関数を定義でき、サブクラスは具体的な実装を提供します。

インターフェイス インターフェイスは、Java の抽象メソッドと定数を定義します。インターフェイス内のメソッドは実装されていませんが、インターフェイスを実装するクラスによって提供されます。このインターフェイスは、実装クラスが指定されたメソッド実装を提供することを要求するコントラクトを定義します。インターフェイスを宣言します。 publicinterfaceExampleInterface{voiddoSomething();intgetSomething();} 抽象クラス 抽象クラスは、インスタンス化できないクラスです。これには、抽象メソッドと非抽象メソッドが混在しています。インターフェイスと同様に、抽象クラスの抽象メソッドはサブクラスによって実装されます。ただし、抽象クラスには、デフォルトの実装を提供する具象メソッドを含めることもできます。抽象クラスを宣言: publicabstractcl
