繁体   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