亚洲精品成人_精品成人一区_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>
    亚洲午夜精品国产| 亚洲精品免费在线看| 亚洲精品乱码| 亚洲欧美丝袜| 好看的日韩精品视频在线| 在线一区免费观看| 韩国亚洲精品| 伊人天天久久大香线蕉av色| 精品一区二区三区日本| 久久久99国产精品免费| 国产亚洲精品自拍| 亚洲经典在线看| 国内精品久久久久久久97牛牛 | 一本一本a久久| 国产精品国产一区二区| 亚洲一区二区在线免费观看| 裸模一区二区三区免费| 国内精品一区二区| 精品国产一区二区三区久久久久久| 美女国产精品| 久久xxxx精品视频| 亚洲欧美久久久| 老司机一区二区三区| 免费看的黄色欧美网站| 亚洲欧美春色| 91在线精品观看| 99国产在线观看| 成人做爰66片免费看网站| 99影视tv| 免费日韩av电影| 四虎影视永久免费在线观看一区二区三区| 狠狠色综合欧美激情| 欧美成ee人免费视频| 欧美日韩中文国产一区发布 | 激情久久中文字幕| 99视频日韩| 久久国产一二区| 99久久精品久久久久久ai换脸| yellow视频在线观看一区二区| 国产98在线|日韩| 欧美精品七区| 欧美激情无毛| 国产九区一区在线| 国产精品对白刺激久久久| 国产区欧美区日韩区| 日本不卡二区高清三区| 在线观看欧美亚洲| 亚洲看片免费| 国产精品一区在线播放| 日韩欧美三级电影| 在线不卡视频| 99re在线播放| 色播亚洲婷婷| 亚洲青涩在线| 国产伦理一区二区三区| 亚洲砖区区免费| aa成人免费视频| 精品国产乱码久久久久久88av| 亚洲激情啪啪| 欧美专区在线| 日韩视频专区| 国产乱码精品一区二区三区不卡| 国产精品免费观看高清| 欧美国产激情| 国产精品国色综合久久| 中文字幕一区二区三区5566| 欧美一进一出视频| 亚洲欧洲日韩综合二区| 亚洲欧美成人综合| 亚洲国产精品久久久久婷婷老年| 一区二区三区欧美成人| 欧美裸体网站| 先锋影音久久久| 在线天堂一区av电影| 97人人模人人爽人人喊38tv| 欧美~级网站不卡| 国产伦一区二区三区色一情 | 日韩精品av一区二区三区| 一本色道久久综合亚洲精品高清| 久久综合给合久久狠狠色| 国产精品永久入口久久久| 五月天色一区| 成人欧美一区二区| 亚洲免费观看| 亚洲欧美日韩在线综合| 国产伦一区二区三区色一情 | 欧美一区二区三区四区夜夜大片| 久久天堂精品| 亚洲青色在线| 欧美国产专区| 日本最新一区二区三区视频观看| 久久激情网站| 一区二区三区四区五区视频| 亚洲狠狠婷婷综合久久久| 波多野结衣精品久久| 日韩一级大片| 国产主播一区| 综合一区中文字幕| 日本在线播放不卡| 久久精品人人做人人爽电影| 久久只有精品| 久久成人在线| 国产亚洲毛片| 中文精品视频一区二区在线观看| 你懂的国产精品永久在线| 欧美日韩一区在线播放| 国产午夜精品一区| 国产伦一区二区三区色一情 | 伊人影院久久| 国产精品国产亚洲精品看不卡15| 亚洲三区四区| 中文字幕在线观看一区二区三区| 日韩hmxxxx| 日韩久久久久久久| 日韩啊v在线| 日韩三级在线播放| 日韩欧美精品一区二区三区经典| 欧美激情国产日韩| 日本黑人久久| 先锋在线资源一区二区三区| 色女人综合av| 亚洲亚洲精品三区日韩精品在线视频| 日本一区视频在线播放| 日本在线播放不卡| 亚洲自拍三区| 欧美涩涩网站| 亚洲第一在线综合在线| 日韩午夜av| 每日更新成人在线视频| 99一区二区三区| 精品日韩欧美| 亚洲欧美综合一区| 国产一区美女| 亚洲在线成人| 国产一区二区三区四区五区在线| 久久精品国产综合精品| 先锋影音一区二区三区| 欧美三级在线| 香蕉久久国产| 韩日午夜在线资源一区二区| 日本在线视频不卡| 亚洲一级影院| 99精品国产高清一区二区| 精品国产福利| 在线国产精品网| 亚洲狠狠婷婷| 波多野结衣成人在线| 日本不卡二区高清三区| 欧美午夜免费影院| 久久精精品视频| 欧美一区二区在线视频观看| 欧美国产另类| 97人人干人人| 自拍偷拍亚洲色图欧美| 99精品国产在热久久婷婷| 官网99热精品| 欧美日本一区| 9a蜜桃久久久久久免费| 一区二区三区电影| 免费在线一区二区| 日韩国产精品一区二区| 99国产精品久久久久老师| 国产亚洲一区在线播放| 欧美午夜免费| 精品国产一区二区三区麻豆小说 | 国产一区在线免费观看| 一区二区三区视频在线播放| 亚洲欧美日韩综合一区| 欧美国产一区二区在线| 在线一区免费观看| 日本一区二区三不卡| 国产精品日本欧美一区二区三区| 免费成人深夜夜行视频| 中日韩视频在线观看| 日韩高清国产精品| 久久av二区| 国产精品观看| 欧美中日韩免费视频| 亚洲一区二区动漫| 亚洲午夜久久久影院伊人| 91九色在线观看| 好吊日精品视频| 日本福利一区二区三区| 久久不射网站| 亚洲午夜久久久久久尤物| 就去色蜜桃综合| 久久精品日产第一区二区三区| 一区二区三区观看| 久久综合入口| 99久久99久久精品国产片| 亚洲精品美女久久7777777| 亚洲精品国产精品国自产| 官网99热精品| 久久电影一区| 99一区二区| 亚洲午夜黄色| 你懂的网址国产 欧美| 欧美在线3区| 久久亚洲高清| 粉嫩av免费一区二区三区|