3

我收到以下错误:

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

引发此错误的行是:

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

以上适用于 Facebook 登录。

有任何想法吗?

4

4 回答 4

6

快速浏览一下就可以看出,TwitterProvider用途AbstractProvider不同于FacebookProvider.

AbstractProvider对于TwitterProvider不执行stateless()

所以我想我要说的是......开箱即用的 Laravel Socialite 包中的 TwitterProvider 无法实现无状态 oAuth。

于 2016-02-22T16:56:39.287 回答
2

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

userFromTokenAndSecret

例子

$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);
于 2018-03-14T14:08:37.550 回答
0

在您的 loginController 中,在 handleProviderCallback 函数中替换:

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

和:

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

使用:

"laravel/socialite": "^3.0"

在您的 composer.json 要求部分。

于 2018-08-27T18:57:09.017 回答
0

您无法从 Twitter 获取用户信息,因为在我写这篇文章时statelessTwitter 不支持。链接到 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 以提高安全性。我希望你明白这个概念。

于 2018-10-20T05:56:55.480 回答