亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

網頁授權

關于 OAuth 2.0

OAuth 是一個關于授權(authorization)的開放網絡標準,在全世界得到廣泛應用,目前的版本是 2.0 版。

OAuth 授權流程大致如下:

摘自:RFC 6749

步驟解釋:

(A)用戶打開客戶端以后,客戶端要求用戶給予授權。

(B)用戶同意給予客戶端授權。

(C)客戶端使用上一步獲得的授權,向認證服務器申請令牌。

(D)認證服務器對客戶端進行認證以后,確認無誤,同意發放令牌。

(E)客戶端使用令牌,向資源服務器申請獲取資源。

(F)資源服務器確認令牌無誤,同意向客戶端開放資源。

關于 OAuth 協議我們就簡單了解到這里,如果還有不熟悉的同學,請 Google 相關資料

微信 OAuth

在微信里的 OAuth 其實有兩種:公眾平臺網頁授權獲取用戶信息開放平臺網頁登錄

它們的區別有兩處,授權地址 不同,scope 不同。

他們的邏輯都一樣:

  • 用戶嘗試訪問一個我們的業務頁面,例如: /user/profile
  • 如果用戶已經登錄,則正常顯示該頁面
  • 系統檢查當前訪問的用戶并未登錄(從 session 或者其它方式檢查),則跳轉到 微信授權服務器(上面的兩種中一種 授權 URL,并告知微信授權服務器我的 回調 URL(redirect_uri=callback.php),此時用戶看到藍色的授權確認頁面(scopesnsapi_base 時不顯示)
  • 用戶點擊確定完成授權,瀏覽器跳轉到 回調URLcallback.php 并帶上 code?code=CODE&state=STATE
  • callback.php 中得到 code 后,通過 code 再次向微信服務器請求得到 網頁授權 access_tokenopenid
  • 你可以選擇拿 openid 去請求 API 得到用戶信息(可選)
  • 將用戶信息寫入 SESSION
  • 跳轉到第 3 步寫入的 target_url 頁面(/user/profile)。

看懵了?沒事,使用 SDK,你不用管這么多。

注意,上面的第 3 步:redirect_uri=callback.php 實際上我們在 Swoole 中用 redirect_uri=callback 回調地址,后面還會帶上授權目標頁面 user/profile,所以完整的 redirect_uri 應該是下面的這樣的 PHP 去拼出來:'redirect_uri=' . urlencode('callback?target=user/profile'),拼接結果為:redirect_uri=callback%3Ftarget%3Duser%2Fprofile

邏輯組成

從上面我們所描述的授權流程來看,我們至少有 3 個頁面:

  • 業務頁面,也就是需要授權才能訪問的頁面。
  • 發起授權頁,此頁面其實可以省略,可以做成一個中間件,全局檢查未登錄就發起授權。
  • 授權回調頁,接收用戶授權后的狀態,并獲取用戶信息,寫入用戶會話狀態(SESSION)。

開始之前

在開始之前請一定要記住,先登錄公眾號后臺,找到 邊欄 “開發” 模塊下的 “接口權限”,點擊 “網頁授權獲取用戶基本信息” 后面的修改,添加你的網頁授權域名。

如果你的授權地址為:http://www.abc.com/xxxxx,那么請填寫 www.abc.com,也就是說請填寫與網址匹配的域名,前者如果填寫 abc.com 是通過不了的。

SDK 中 OAuth 模塊的 API

SDK 中,我們使用名稱為 oauth 的模塊來完成授權服務,我們主要用到以下兩個 API

發起授權

// $redirectUrl 為跳轉目標,請自行 `302` 跳轉到目標地址
$redirectUrl = $officialAccount->oauth->scopes(['snsapi_userinfo'])
    ->redirect();

當然你也可以在發起授權的時候指定回調 URL,比如設置回調 URL 為當前頁面:

<?php

// 在 EasySwoole 中,$this->request() 為 EasySwoole 的請求對象
$redirectUrl = $officialAccount->oauth->scopes(['snsapi_userinfo'])
    ->redirect($this->request()->getUri());

// 在原生 Swoole 中,$request 為 \Swoole\Http\Request 的實例對象
$redirectUrl = $officialAccount->oauth->scopes(['snsapi_userinfo'])
    ->redirect($request->server['request_uri']);

它的返回值 $redirectUrl 是一個字符串跳轉地址,請自行使用框架的跳轉方法實現跳轉,在 EasySwoole 中寫法為:

$this->response()->redirect($redirectUrl);

在原生 Swoole 中可以這樣寫:

// $response 為 \Swoole\Http\Response 的實例對象
$response->redirect($redirectUrl);

獲取已授權用戶

<?php

$code = "微信回調URL攜帶的 code";

$user = $officialAccount->oauth->userFromCode($code);

返回的 $userEasySwoole\WeChat\OfficialAccount\OAuth\User 對象,你可以從該對象拿到更多的信息。

$user 可以用的方法:

  • $user->getId(); 對應微信的 openid
  • $user->getNickname(); 對應微信的 nickname
  • $user->getName(); 對應微信的 nickname
  • $user->getAvatar(); 頭像地址
  • $user->getRaw(); 原始 API 返回的結果
  • $user->getAccessToken(); access_token
  • $user->getRefreshToken(); refresh_token
  • $user->getExpiresIn(); expires_inaccess_token 的過期時間
  • $user->getTokenResponse(); 返回 access_token 時的響應值

注意:$user 里沒有 openid$user->id 便是 openid。如果你想拿微信返回給你的原樣的全部信息,請使用:$user->getRaw();

scopesnsapi_base$officialAccount->oauth->user(); 對象里只有 id,沒有其它信息。

網頁授權實例

我們這里來用 PHP 原生 Swoole 寫法舉個例子,oauth_callback 是我們的授權回調 URL (未 urlencode 編碼的 URL),user/profile 是我們需要授權才能訪問的頁面,它的 PHP 代碼如下:


// http://easyswoolewechat.com/user/profile

<?php

// ... 這里省略

$http->on('request', function (\Swoole\Http\Request $request, \Swoole\Http\Response $response) {

    $config = [
        // ...
        'oauth' => [
            'scopes' => ['snsapi_userinfo'],
            'callback' => '/oauth_callback',
        ],
        // ..
    ];

    $officialAccount = \EasySwoole\WeChat\Factory::officialAccount($config);

    $oauth = $officialAccount->oauth;

    // 未登錄
    if (empty($_SESSION['wechat_user'])) {

        $_SESSION['target_url'] = 'user/profile';
        $redirectUrl = $oauth->redirect();
        $request->redirct($redirectUrl);
        exit;
    }

    // 已經登錄過
    $user = $_SESSION['wechat_user'];
});

// ... 這里省略

授權回調頁:

// http://easyswoolewechat.com/oauth_callback

<?php

// ... 這里省略

$http->on('request', function (\Swoole\Http\Request $request, \Swoole\Http\Response $response) {

    $config = [
        // ...
    ];

    $officialAccount = \EasySwoole\WeChat\Factory::officialAccount($config);

    $oauth = $officialAccount->oauth;

    // 獲取 OAuth 授權結果用戶信息
    $code = "微信回調URL攜帶的 code";

    $user = $oauth->userFromCode($code);

    $_SESSION['wechat_user'] = $user->toArray();

    $targetUrl = empty($_SESSION['target_url']) ? '/' : $_SESSION['target_url'];

    // 跳轉到 user/profile
    $response->redirect($targetUrl);
});

// ... 這里省略

上面的例子呢都是基于 $_SESSION 來保持會話的,在微信客戶端中,你可以結合 Cookies 來存儲,但是有效期平臺不一樣時間也不一樣,好像 Android 的失效會快一些,不過基本也夠用了。

亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    好吊色欧美一区二区三区视频 | 九色91视频| 国产一区二区黄色| 久久久久久久有限公司| 亚洲国产一区二区三区在线| 日本午夜一区二区三区| 中文字幕一区二区三区乱码 | 国产伦精品一区二区三区视频黑人 | 亚洲精品日韩在线观看| 欧美日韩成人| 国产精华一区二区三区| 视频在线一区二区三区| 亚洲日本黄色| 久久综合色一本| 国产在线观看一区| 久草热久草热线频97精品| 欧美国产精品| 成人av网站观看| 欧美日韩视频一区二区三区| 久久激情综合| 午夜视频久久久| 久久男女视频| 欧美午夜精品久久久久免费视| 99久久99久久| 精品999在线观看| 欧美二区三区在线| 亚洲欧美视频| 欧美日韩精品免费观看视频完整 | 在线国产日韩| 欧美aaaaa喷水| 国产亚洲综合精品| 五码日韩精品一区二区三区视频| 在线观看成人av| 午夜精品短视频| 草莓视频一区| aa日韩免费精品视频一| 亚洲欧洲久久| 明星裸体视频一区二区| 久久亚洲影院| 亚洲精选在线| 欧美精品导航| 日本一区二区三区免费看| 玖玖精品视频| 国产视频精品网| 黄色av日韩| 亚洲一区二区三区精品动漫| 91久久精品一区二区别| 亚洲欧洲日本国产| 欧美阿v一级看视频| 欧美午夜免费| 精品蜜桃一区二区三区| 久久永久免费| 美女被久久久| 香蕉av777xxx色综合一区| 国语自产精品视频在线看8查询8| 清纯唯美一区二区三区| 久久99国产精品99久久| 国产精品一区视频网站| 老司机午夜精品视频| 中文在线一区| 精品999在线观看| 欧美网站在线| 国内在线观看一区二区三区| 午夜久久资源| 欧美午夜精品| 亚洲二区精品| 99pao成人国产永久免费视频| 欧美+日本+国产+在线a∨观看| 日韩av电影免费在线| 日本在线观看不卡| 欧美中日韩免费视频| 日本高清一区| 艳色歌舞团一区二区三区| 亚洲精品国产精品国自产| 日本一区二区三区视频在线播放 | 在线免费观看欧美| 黄色日韩在线| 亚洲美女黄网| 久久天堂成人| 狠狠色狠狠色综合人人| 久久av一区二区| 亚欧洲精品在线视频免费观看| 亚洲五月六月| 国内精品视频在线播放| 亚洲在线成人| 国产日韩三区| 亚洲高清视频在线观看| 欧美日韩精品综合| 国产精品久久久一区二区| 91丝袜脚交足在线播放| 久久这里精品国产99丫e6| 一本一道久久a久久精品综合| 激情欧美一区| 玖玖精品视频| 欧美中日韩免费视频| 中国成人在线视频| 国产精品乱码| 免费日韩av电影| 国产精品国产一区二区| 国产亚洲在线| 日韩动漫在线观看| 在线看无码的免费网站| 成人欧美一区二区三区视频xxx| 久久riav| 黄色一区二区三区四区| 99久久99| 欧美日韩高清在线一区| 国产午夜精品一区二区三区欧美| 成人性色av| 国产精品久久亚洲7777| 国产精品久久波多野结衣| 91传媒视频在线观看| 国内视频一区二区| 欧美激情精品久久久六区热门| 国产农村妇女精品一二区| 久久99久久精品国产| 在线看片成人| 国内视频一区二区| 在线日韩欧美| 明星裸体视频一区二区| 99精品视频免费全部在线| 欧美成人第一区| 国产视频一区免费看| 久久久一本精品99久久精品| 亚洲国产精品一区在线观看不卡| 成人免费在线看片| 国内精品久久久久久久影视麻豆 | 乱人伦精品视频在线观看| 国产伦精品一区二区三区四区免费| 一区二区三区四区五区精品| 久久国产精品99国产| 午夜精品免费| 久久久久国产精品视频| 麻豆9191精品国产| 欧美激情第二页| 欧美激情视频一区二区三区| 国产精品美女| 韩国一区二区三区美女美女秀| 欧美大香线蕉线伊人久久国产精品 | 男人的天堂成人在线| 午夜日韩视频| 日韩av电影免费播放| 国产伦精品一区二区三区照片91| 99www免费人成精品| 中国一区二区三区| 欧美一级二级三级九九九| 国产成人精品日本亚洲11| 99精品视频免费| 亚洲图片在线观看| 在线视频不卡一区二区| 老司机精品福利在线观看| 久久在线精品| 久久一日本道色综合久久| 国产伦精品一区二区三区| 欧美激情1区2区3区| 色999日韩自偷自拍美女| 精品日韩欧美| 国内精品二区| 国产伦精品一区二区三区高清版| 欧美在线综合| 午夜亚洲伦理| 免费久久99精品国产自在现线| 一本久久综合| 夜夜嗨av一区二区三区网站四季av| 欧美日韩影院| 在线观看亚洲视频啊啊啊啊| 在线日韩av永久免费观看| 激情偷拍久久| 国产亚洲在线| 免费中文字幕日韩欧美| 男人的天堂亚洲| 99九九视频| 久久福利电影| 婷婷久久伊人| 欧美视频1区| 中文精品视频| 动漫美女被爆操久久久| 九九九九九精品| 亚洲欧洲精品一区二区| 欧美日韩大片一区二区三区| 好吊视频一区二区三区四区| 亚洲黄色三级| 国产偷自视频区视频一区二区 | 亚洲一区在线直播| 国产字幕视频一区二区| 99热这里只有精品8| 久热精品在线| 欧美婷婷久久| 亚洲天堂男人| 久久精品卡一| 精品高清视频| 欧美成人高清| 亚洲综合精品| 久久久久久久久久久一区| 亚洲视频在线二区| 亚洲欧洲日本mm| 国产欧美日韩综合精品二区| 日韩av高清| 亚洲美女毛片| 精品国产乱码一区二区三区四区|