検索
ホームページバックエンド開発PHPチュートリアル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) をクエリします。メールボックスがアクティブ化されていない場合は、ユーザーは自分の電子メールにアクセスしてアカウントをアクティブ化するように求められます。

以下の手順を詳しく説明します:

ステップ1: アプリキーとアプリシークレットを申請します 申請アドレス: http://open.weibo.com/ ページ上のウェブサイトをクリックしてWEBにアクセスし、そのまま申請してください合格すると、次のアプリ キーとアプリ シークレットを取得します:

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、どちらも一意であり、ユーザーの識別に使用されます。これに基づいて保存します)。

コードをコピー コードは次のとおりです:
CREATE TABLE IF NOT EXISTS `third_login` (
`user_id` INT(6) NOT NULL,
`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 = 'サードパーティログインフォーム'


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


2.

設定ファイルを書き込み、アプリケーションの下に新しいファイルsina_conf.phpを作成し、申請したアプリキーとアプリシークレットを書き込みます

コードは次のとおりです。

コードをコピーします

コードは次のとおりです:$config["sina_conf"] = array(
"App_Key" => '1428003339',
"App_Secret" => ;'f1c6177a 38b39f764c76a1690720a6dc' ,
"WB_CALLBACK_URL" => 'http://test.com/callback.php'
);



保存
3.

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.

写登录制御器 application/controllers下,建立login.php文件(名字你可以自己取),代码:



复制代価代価如下:


/**
 * 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) // バインディング
}

//保存
;

//登録コントローラーでは、ユーザー情報が user_reg テーブルに書き込まれ、sina_id も third_login テーブルに書き込まれます。ここでは、サードパーティのログイン インターフェイスのデータ テーブルにユーザー ID を格納するコードのみを示します。

class Register は CI_Controller を拡張します {

パブリック関数 __construct() {

__construct(); "user_id " => $rs,

"sina_id" => $this->session->userdata('sina_id'),
"qq_id " => ;$this->session-> ;userdata('qq_id '),

);
保存

6.
ファイルレイアウトを表示するSina Weiboログインボタン、アプリケーション/ビューの下にindex.phpファイルを作成、コード:




コードをコピーします

コードは次のとおりです:

<p></p>
CI フレームワーク開発 Sina Weibo ログイン インターフェイス完全版ソース コード_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 = "

"


"
" 自動ジャンプ
"
";
$str .="
";
$ str .="";
$str .="



保存

この時点で、ブラウザを使用してindex.phpファイルにアクセスすると、Weiboアカウントでログインするためのログインボタンが表示されます。ボタンをクリックすると、Weiboログインページにジャンプし、アカウントの入力を求められます。 Sina Weibo のユーザー名とパスワード、彼は別の操作を実行します。具体的なプロセスについても上で述べました。

http://www.bkjia.com/PHPjc/777637.html

www.bkjia.com

本当

http://www.bkjia.com/PHPjc/777637.html技術記事まず、プロセスを見てみましょう。 プロセスの原則: 1. コードを通じて access_token を取得し、認可を取得し、ユーザーの情報 (ユーザー u_id を含む) を取得します (この u_id は、後でサードパーティのログイン テーブルで呼び出されます)。 ..
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
主板aafp是什么接口主板aafp是什么接口Aug 29, 2022 am 10:50 AM

主板上的aafp是音频接口;该接口的功能是启用前面板的“3.5mm”插孔,起到传输音频的作用,aafp跳线基本上由两个部分组成,一部分是固定在主板、硬盘等设备上的,由两根或两根以上金属跳针组成,另一部分是跳线帽,是一个可以活动的组件,外层是绝缘塑料,内层是导电材料,可以插在跳线针上。

cha fan表示什么风扇cha fan表示什么风扇Sep 15, 2022 pm 03:09 PM

“cha fan”表示的是机箱风扇;“cha”是“chassis”的缩写,是机箱的意思,“cha fan”接口是主板上的风扇供电接口,用于连接主板与机箱风扇,可以配合温度传感器反馈的信息进行智能的转速调节、控制噪音。

ioioi是什么接口ioioi是什么接口Aug 31, 2022 pm 04:50 PM

ioioi是指COM接口,即串行通讯端口,简称串口,是采用串行通信方式的扩展接口。COM接口是指数据一位一位地顺序传送;其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

link/act是什么接口link/act是什么接口Feb 23, 2023 pm 04:14 PM

link/act是物理数据接口;交换机上的link/act指示灯表示线路是否连接或者活动的状态;通常Link/ACT指示灯用来观察线路是否激活或者通畅;一般情况下,若是线路畅通,则指示灯长亮,若是有数据传送时,则指示灯闪烁。

sata6g是什么接口sata6g是什么接口Sep 14, 2022 am 11:46 AM

sata6g是数据传输速度为“6G/s”的sata接口;sata即“Serial ATA”,也就是串行ATA,是主板接口的名称,现在的硬盘和光驱都使用sata接口与主板相连,这个接口的规格目前已经发展到第三代sata3接口。

鼠标插在主机哪个接口鼠标插在主机哪个接口Sep 13, 2022 pm 03:50 PM

鼠标插在主机的串口接口、PS/2接口或USB接口上。串行接口是最古老的鼠标接口,是一种9针或25针的D型接口,将鼠标接到电脑主机串口上就能使用。PS/2接口是1987年IBM公司推出的鼠标接口,是一种鼠标和键盘的专用接口,是一种6针的圆型接口。USB接口,是一种高速的通用接口,具有非常高的数据传输率,且支持热插拔。

dc接口是什么意思dc接口是什么意思Aug 24, 2022 am 10:47 AM

dc接口是一种为转变输入电压后有效输出固定电压接口的意思;dc接口是由横向插口、纵向插口、绝缘基座、叉形接触弹片、定向键槽组成,两只叉型接触弹片定位在基座中心部位,成纵横向排列互不相连,应用于手机、MP3、数码相机、便携式媒体播放器等产品中。

pump fan是什么接口pump fan是什么接口Jun 25, 2021 pm 02:55 PM

pump fan是散热风扇接口。主板上的风扇接口有cpu fun、sys fun、pump fun,对于一般普通用户来说区别不大,一般接哪个都行,而pump fun上的电流更大一点,用于接功率大一点的水冷风扇头。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

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

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール