国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用 Laravel Socialite 集成微信登錄

hufeng / 3434人閱讀

摘要:允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。這樣,讓用戶可以授權第三方網站訪問他們存儲在另外服務提供者的某些特定信息,而非所有內容。

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 Authorization

OAuth(開放授權)是一個開放標準,允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。

OAuth 允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。每一個令牌授權一個特定的網站(例如,視頻編輯網站)在特定的時段(例如,接下來的 2 小時內)內訪問特定的資源(例如僅僅是某一相冊中的視頻)。這樣,OAuth 讓用戶可以授權第三方網站訪問他們存儲在另外服務提供者的某些特定信息,而非所有內容。

我們的應用與使用 OAuth 標準的第三方應用的交互流程一般是這樣的:

展示跳轉到第三方應用登錄的鏈接

用戶點擊鏈接跳轉到第三方應用登錄并進行授權

在用戶授權后第三方應用會跳轉到我們所指定的應用回調資源地址并伴隨用于交互 AccessToken 的 Code

我們的應用拿到 Code 后自主請求第三方應用并使用 Code 獲取該用戶的 AccessToken

獲取 AccessToken 之后的應用即可自主的從第三方應用中獲取用戶的資源信息

Laravel Socialite UML

安裝 Laravel Socialite

使用 Composer 進行安裝:

composer require laravel/socialite
配置

你需要在 config/app.phpproviders 鍵中追加:

"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

相關文章

  • Laravel Socialite 詳解

    摘要:這樣,讓用戶可以授權第三方網站訪問他們存儲在另外服務提供者的某些特定信息,而非所有內容。 不久之前 Dearmadman 曾寫過一篇 使用 Laravel Socialite 集成微信登錄 的文章,但是似乎還是有些同學不太明白,詢問著如何集成 QQ 登錄,那么,本篇我們就來剖析一下 Laravel Socialite 的詳細內容。讓各位同學都獲得 Laravel Socialite 所...

    yuanxin 評論0 收藏0
  • Laravel5.1 實現第三方登錄認證(包括微博、QQ、微信、豆瓣)

    摘要:目前支持的認證有。英文不好的同學比如我,下面是中文文檔通過擴展的,實現了很多第三方認證。國內的有微博微信豆瓣。至于和的具體值,這個是由新浪微博分發給你的,在新浪微博的授權回調頁中填寫。 前言 第三方登錄認證能簡化用戶登錄/注冊的操作,降低用戶登錄/注冊的門檻,對提高應用的用戶轉化率很有幫助。 Socialite Laravel 為我們提供了簡單、易用的方式,使用 Laravel Soc...

    nifhlheimr 評論0 收藏0
  • 淺談多個社交賬號的綁定設計

    摘要:在詳解中使用解決了第三方賬號登錄集成的問題,那么在獲取到用戶資料之后呢集成多個社交賬號,該如何綁定同一個賬號本篇就讓我們來探討一下集成登錄的那點事。 Dearmadman 在 Laravel Socialite 詳解 中使用 larastarscn/socialite 解決了第三方賬號登錄集成的問題,那么在獲取到用戶資料之后呢?集成多個社交賬號,該如何綁定同一個賬號?本篇就讓我們來探討...

    wean 評論0 收藏0
  • laravel package收集

    摘要:查找保存下載用搭建自己的緩存倉庫權限管理的好選擇基于封裝的后臺管理系統,支持手機和端訪問支付寶風格的驗證器后臺系統微信接口的部署腳本開發的博客系統百度推送自動記錄用戶行為擴展一個項目管理系統根據生成對應導航的狀態 1.debug https://github.com/barryvdh/l... showImg(https://segmentfault.com/img/bVmhWL); ...

    psychola 評論0 收藏0
  • Laravel優秀擴展包整理

    摘要:本文整理上國內相對較常用及以上版本的擴展包代碼生成文檔對象云存儲文檔消息閃存文檔編輯器代碼提示文檔文檔文檔圖片處理文檔微信開發文檔語言包文檔驗證碼文檔社會化登陸文檔系統日志文檔前端構建工具文檔跨域資源共享文檔基于的用戶認 本文整理Github上國內相對較常用Laravel5及以上版本的擴展包 laravel-generator(代碼生成) Github:https://github....

    lykops 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<