簡體   English   中英

調用未定義的方法Laravel \ Socialite \ One \ TwitterProvider :: stateless()

[英]Call to undefined method Laravel\Socialite\One\TwitterProvider::stateless()

我收到以下錯誤:

Call to undefined method Laravel\Socialite\One\TwitterProvider::stateless()

拋出此錯誤的行是:

$userData = Socialite::driver($provider)->stateless()->user();

以上適用於Facebook登錄。

有任何想法嗎?

快速瀏覽顯示TwitterProvider使用與FacebookProvider不同的AbstractProvider

TwitterProvider這個AbstractProvider沒有實現stateless()

所以我想我所說的是......無狀態的oAuth是開箱即用的Laravel Socialite包中的TwitterProvider無法實現的。

TwitterProvider需要使用令牌的秘密 ,您可以使用此方法

userFromTokenAndSecret

$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);

你不能使用stateless從Twitter獲取用戶信息,因為Twitter不支持OAuth 2.0 ,因為我寫這篇文章。 鏈接到twitter dev論壇但是,我找到了一個使用API​​登錄的解決方法。

但是,執行此操作的一種方法是使用此方法重定向

return Socialite::driver('twitter')->redirect();

在回調中,使用此獲取返回的信息

Socialite::driver($provider)->user();

從此處獲取令牌和其他信息,然后,執行您的操作並將憑據存儲在數據庫中並獲取新的數據庫行ID並加密該值並使用該加密值重定向到您的登錄頁面。 從您的登錄頁面,執行一些操作並檢查是否存在這樣的id,如果是,則嘗試登錄。現在在loginController ,執行類似這樣的操作

            $authId = $request->get('authId');
            $authId = decrypt($authId);
            $social = SocialAuth::find($authId);
            $user = User::find($social->user_id);

然后嘗試使用id登錄該用戶。 使用更多參數重定向到登錄URL,以提高安全性。 我希望你能得到這個概念。

在你的loginController中,在handleProviderCallback函數中替換:

$userSocial = Socialite::driver($social)->stateless()->user();

有:

$userSocial = Socialite::driver($social)->user();

使用:

"laravel/socialite": "^3.0"

在您的composer.json需要部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM