调用未定义的方法Laravel \ Socialite \ One \ TwitterProvider :: stateless()

时间:2016-02-15 19:02:33

标签: php laravel twitter-oauth laravel-5.2 laravel-socialite

我收到以下错误:

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

抛出此错误的行是:

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

以上适用于Facebook登录。

有什么想法吗?

4 个答案:

答案 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的“需求”部分。