我收到以下错误:
Call to undefined method Laravel\Socialite\One\TwitterProvider::stateless()
引发此错误的行是:
$userData = Socialite::driver($provider)->stateless()->user();
以上适用于 Facebook 登录。
有任何想法吗?
我收到以下错误:
Call to undefined method Laravel\Socialite\One\TwitterProvider::stateless()
引发此错误的行是:
$userData = Socialite::driver($provider)->stateless()->user();
以上适用于 Facebook 登录。
有任何想法吗?
快速浏览一下就可以看出,TwitterProvider
用途AbstractProvider
不同于FacebookProvider
.
这AbstractProvider
对于TwitterProvider
不执行stateless()
。
所以我想我要说的是......开箱即用的 Laravel Socialite 包中的 TwitterProvider 无法实现无状态 oAuth。
TwitterProvider 需要带有令牌的秘密,您可以使用此方法
userFromTokenAndSecret
例子
$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);
在您的 loginController 中,在 handleProviderCallback 函数中替换:
$userSocial = Socialite::driver($social)->stateless()->user();
和:
$userSocial = Socialite::driver($social)->user();
使用:
"laravel/socialite": "^3.0"
在您的 composer.json 要求部分。
您无法从 Twitter 获取用户信息,因为在我写这篇文章时stateless
Twitter 不支持。链接到 twitter 开发论坛
但是,我找到了使用 API 登录的解决方法。OAuth 2.0
但是,执行此操作的一种方法是使用此重定向
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 以提高安全性。我希望你明白这个概念。