ホームページ バックエンド開発 PHPチュートリアル CI フレームワーク開発 Sina Weibo ログイン インターフェイス完全版ソース コード_PHP チュートリアル

CI フレームワーク開発 Sina Weibo ログイン インターフェイス完全版ソース コード_PHP チュートリアル

Jul 13, 2016 am 10:29 AM
ci インターフェース

まず、プロセスを見てみましょう:
プロセスの原理:
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ファイルを作成、コード:




コードをコピーします

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

保存
注: これは画像ボタンです。ダウンロードアドレス: 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 .="

";
$ 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 までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

コンピュータのマザーボードの内部インターフェイスとは何ですか? コンピュータのマザーボードの内部インターフェイスに関する推奨される入門 コンピュータのマザーボードの内部インターフェイスとは何ですか? コンピュータのマザーボードの内部インターフェイスに関する推奨される入門 Mar 12, 2024 pm 04:34 PM

パソコンを組み立てる際、設置作業は簡単ですが、誤って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 言語の一般的なプログラミング パラダイムと設計パターン Mar 04, 2024 pm 06:06 PM

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

PHP インターフェースの概要とその定義方法 PHP インターフェースの概要とその定義方法 Mar 23, 2024 am 09:00 AM

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

NotImplementedError() の解決策 NotImplementedError() の解決策 Mar 01, 2024 pm 03:10 PM

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

Java のデザイン パターンにおけるインターフェイスと抽象クラスの適用 Java のデザイン パターンにおけるインターフェイスと抽象クラスの適用 May 01, 2024 pm 06:33 PM

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

Honmeng システムの洞察: 実際の機能測定と使用体験 Honmeng システムの洞察: 実際の機能測定と使用体験 Mar 23, 2024 am 10:45 AM

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

Java でのインターフェイスと抽象クラスの内部クラス実装 Java でのインターフェイスと抽象クラスの内部クラス実装 Apr 30, 2024 pm 02:03 PM

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

Java インターフェースと抽象クラス: それらの間の内部接続を明らかにする Java インターフェースと抽象クラス: それらの間の内部接続を明らかにする Mar 04, 2024 am 09:34 AM

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

See all articles