调用未定义的方法 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

AbstractProvider 用于 TwitterProvider 未实现 stateless()

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

TwitterProvider 需要 secret 和 token 你可以使用这个方法

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 要求部分。

您无法使用 stateless 从 Twitter 获取用户信息,因为在我撰写本文时 Twitter 不支持 OAuth 2.0Link 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 以获得更高的安全性。 我希望你明白这个概念。