我收到以下错误:
Call to undefined method Laravel\Socialite\One\TwitterProvider::stateless()
抛出此错误的行是:
$userData = Socialite::driver($provider)->stateless()->user();
以上适用于Facebook登录。
有什么想法吗?
答案 0 :(得分:6)
快速查看显示some_dict = {'1':"lol", '2':"other string", 'another key':"another string"}
var = '1'
print some_dict[var]
使用与TwitterProvider
不同的AbstractProvider
。
FacebookProvider
的这个AbstractProvider
未实现TwitterProvider
。
所以我想我所说的是......无状态的oAuth是开箱即用的Laravel Socialite包中的TwitterProvider无法实现的。
答案 1 :(得分:1)
TwitterProvider需要秘密和令牌才能使用此方法
userFromTokenAndSecret
示例
$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);
答案 2 :(得分:0)
由于我在撰写本文时,Twitter不支持stateless
,因此您无法使用OAuth 2.0
从Twitter获取用户信息。 Link to twitter dev forum
但是,我找到了使用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,以提高安全性。 希望您能理解。
答案 3 :(得分:-1)
在您的loginController中的handleProviderCallback函数中替换:
$userSocial = Socialite::driver($social)->stateless()->user();
具有:
$userSocial = Socialite::driver($social)->user();
使用:
"laravel/socialite": "^3.0"
在composer.json的“需求”部分。