摘要:允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。這樣,讓用戶可以授權第三方網站訪問他們存儲在另外服務提供者的某些特定信息,而非所有內容。
Laravel Socialite
Laravel Socialite provides an expressive, fluent interface to OAuth authentication with Facebook, Twitter, Google, LinkedIn, GitHub and Bitbucket. It handles almost all of the boilerplate social authentication code you are dreading writing.
Laravel Socialite 為第三方應用的 OAuth 認證提供了非常豐富友好的接口,我們使用它可以非常方便快捷的對類似微信、微博等第三方登錄進行集成。
Open AuthorizationOAuth(開放授權)是一個開放標準,允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。
OAuth 允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。每一個令牌授權一個特定的網站(例如,視頻編輯網站)在特定的時段(例如,接下來的 2 小時內)內訪問特定的資源(例如僅僅是某一相冊中的視頻)。這樣,OAuth 讓用戶可以授權第三方網站訪問他們存儲在另外服務提供者的某些特定信息,而非所有內容。
我們的應用與使用 OAuth 標準的第三方應用的交互流程一般是這樣的:
展示跳轉到第三方應用登錄的鏈接
用戶點擊鏈接跳轉到第三方應用登錄并進行授權
在用戶授權后第三方應用會跳轉到我們所指定的應用回調資源地址并伴隨用于交互 AccessToken 的 Code
我們的應用拿到 Code 后自主請求第三方應用并使用 Code 獲取該用戶的 AccessToken
獲取 AccessToken 之后的應用即可自主的從第三方應用中獲取用戶的資源信息
Laravel Socialite UML 安裝 Laravel Socialite使用 Composer 進行安裝:
composer require laravel/socialite配置
你需要在 config/app.php 的 providers 鍵中追加:
"providers" => [ // Other service providers... LaravelSocialiteSocialiteServiceProvider::class, ],
在 aliasses 鍵中添加 Socialite:
"Socialite" => LaravelSocialiteFacadesSocialite::class,
在 config/services.php 配置文件中添加驅動器配置項:
"github" => [ "client_id" => "your-github-app-id", "client_secret" => "your-github-app-secret", "redirect" => "http://your-callback-url", ],
至此整個流程安裝完畢。
集成微信登錄集成微信我們需要提供一個 WechatServiceProvider 和 一個 WechatProvider,用這兩個文件來為微信登錄提供驅動,Laravel Socialite 的 SocialiteManager 繼承自 IlluminateSupportManager 類,而其對自定義驅動提供了友好的接口支持,所以我們可以手動的添加一個 Wechat 驅動器:
openId = $openId; return $this; } /** * {@inheritdoc}. */ protected $scopes = ["snsapi_login"]; /** * {@inheritdoc}. */ public function getAuthUrl($state) { return $this->buildAuthUrlFromBase("https://open.weixin.qq.com/connect/qrconnect", $state); } /** * {@inheritdoc}. */ protected function buildAuthUrlFromBase($url, $state) { $query = http_build_query($this->getCodeFields($state), "", "&", $this->encodingType); return $url."?".$query."#wechat_redirect"; } /** * {@inheritdoc}. */ protected function getCodeFields($state = null) { return [ "appid" => $this->clientId, "redirect_uri" => $this->redirectUrl, "response_type" => "code", "scope" => $this->formatScopes($this->scopes, $this->scopeSeparator), "state" => $state, ]; } /** * {@inheritdoc}. */ public function getTokenUrl() { return "https://api.weixin.qq.com/sns/oauth2/access_token"; } /** * {@inheritdoc}. */ public function getUserByToken($token) { $response = $this->getHttpClient()->get("https://api.weixin.qq.com/sns/userinfo", [ "query" => [ "access_token" => $token, "openid" => $this->openId, "lang" => "zh_CN", ], ]); return json_decode($response->getBody(), true); } /** * {@inheritdoc}. */ public function mapUserToObject(array $user) { return (new User())->setRaw($user)->map([ "openid" => $user["openid"], "nickname" => $user["nickname"], "avatar" => $user["headimgurl"], "name" => $user["nickname"], "email" => null, "unionid" => $user["unionid"] ]); } /** * {@inheritdoc}. */ protected function getTokenFields($code) { return [ "appid" => $this->clientId, "secret" => $this->clientSecret, "code" => $code, "grant_type" => "authorization_code", ]; } /** * {@inheritdoc}. */ public function getAccessTokenResponse($code) { $postKey = (version_compare(ClientInterface::VERSION, "6") === 1) ? "form_params" : "body"; $response = $this->getHttpClient()->post($this->getTokenUrl(), [ "headers" => ["Accept" => "application/json"], $postKey => $this->getTokenFields($code), ]); $responseBody = json_decode($response->getBody(), true); $this->setOpenId($responseBody["openid"]); return $responseBody; } }
編寫完驅動之后我們需要注冊該驅動器到 SocialiteManager 中,因此我們編寫一個 WechatServiceProvider:
app->make("LaravelSocialiteContractsFactory")->extend("wechat", function ($app) { $config = $app["config"]["services.wechat"]; return new WechatProvider( $app["request"], $config["client_id"], $config["client_secret"], $config["redirect"] ); }); } public function register() { } }
接著我們就可以添加配置項及將服務提供者注冊到 Laravel 中:
// app.php "providers" => [ // Other service providers... CrowdfundingProvidersSocialiteWechatServiceProvider::class, ], // services.php "wechat" => [ "client_id" => "appid", "client_secret" => "appSecret", "redirect" => "http://xxxxxx.proxy.qqbrowser.cc/oauth/callback/driver/wechat", ]
緊接著添加路由及控制器:
// route.php Route::group(["middleware" => "web"], function () { Route::get("oauth/callback/driver/{driver}", "OAuthAuthorizationController@handleProviderCallback"); Route::get("oauth/redirect/driver/{driver}", "OauthAuthorizationController@redirectToProvider"); });
控制器:
redirect(); } public function handleProviderCallback($driver) { $user = Socialite::driver($driver)->user(); // dd($user) } }
至此集成完畢。
PS: 歡迎關注簡書 Laravel 專題,也歡迎 Laravel 相關文章的投稿 :),作者知識技能水平有限,如果你有更好的設計方案歡迎討論 :)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21859.html
摘要:這樣,讓用戶可以授權第三方網站訪問他們存儲在另外服務提供者的某些特定信息,而非所有內容。 不久之前 Dearmadman 曾寫過一篇 使用 Laravel Socialite 集成微信登錄 的文章,但是似乎還是有些同學不太明白,詢問著如何集成 QQ 登錄,那么,本篇我們就來剖析一下 Laravel Socialite 的詳細內容。讓各位同學都獲得 Laravel Socialite 所...
摘要:目前支持的認證有。英文不好的同學比如我,下面是中文文檔通過擴展的,實現了很多第三方認證。國內的有微博微信豆瓣。至于和的具體值,這個是由新浪微博分發給你的,在新浪微博的授權回調頁中填寫。 前言 第三方登錄認證能簡化用戶登錄/注冊的操作,降低用戶登錄/注冊的門檻,對提高應用的用戶轉化率很有幫助。 Socialite Laravel 為我們提供了簡單、易用的方式,使用 Laravel Soc...
摘要:在詳解中使用解決了第三方賬號登錄集成的問題,那么在獲取到用戶資料之后呢集成多個社交賬號,該如何綁定同一個賬號本篇就讓我們來探討一下集成登錄的那點事。 Dearmadman 在 Laravel Socialite 詳解 中使用 larastarscn/socialite 解決了第三方賬號登錄集成的問題,那么在獲取到用戶資料之后呢?集成多個社交賬號,該如何綁定同一個賬號?本篇就讓我們來探討...
摘要:查找保存下載用搭建自己的緩存倉庫權限管理的好選擇基于封裝的后臺管理系統,支持手機和端訪問支付寶風格的驗證器后臺系統微信接口的部署腳本開發的博客系統百度推送自動記錄用戶行為擴展一個項目管理系統根據生成對應導航的狀態 1.debug https://github.com/barryvdh/l... showImg(https://segmentfault.com/img/bVmhWL); ...
摘要:本文整理上國內相對較常用及以上版本的擴展包代碼生成文檔對象云存儲文檔消息閃存文檔編輯器代碼提示文檔文檔文檔圖片處理文檔微信開發文檔語言包文檔驗證碼文檔社會化登陸文檔系統日志文檔前端構建工具文檔跨域資源共享文檔基于的用戶認 本文整理Github上國內相對較常用Laravel5及以上版本的擴展包 laravel-generator(代碼生成) Github:https://github....
閱讀 2088·2021-10-08 10:21
閱讀 2483·2021-09-29 09:34
閱讀 3502·2021-09-22 15:51
閱讀 4943·2021-09-22 15:46
閱讀 2321·2021-08-09 13:42
閱讀 3442·2019-08-30 15:52
閱讀 2731·2019-08-29 17:13
閱讀 1561·2019-08-29 11:30