【问题标题】:Laravel \ Socialite \ Two \ InvalidStateException No message Error in Facebook SocialiteLaravel \ Socialite \ Two \ InvalidStateException Facebook Socialite 中没有消息错误
【发布时间】:2019-02-07 03:51:39
【问题描述】:

我使用 facebook 作为我的应用程序的登录名。用户成功登录后,他们被重定向到我的用户主页。但是当我在登录后尝试刷新页面时会引发错误:

Laravel \ Socialite \ 二\ InvalidStateException 没有消息

这是显示的代码:

public function user()
{
    if ($this->hasInvalidState()) {
        throw new InvalidStateException; // this line is highlighted
    }

    $response = $this->getAccessTokenResponse($this->getCode());

    $user = $this->mapUserToObject($this->getUserByToken(
        $token = Arr::get($response, 'access_token')
    ));

    return $user->setToken($token)
                ->setRefreshToken(Arr::get($response, 'refresh_token'))
                ->setExpiresIn(Arr::get($response, 'expires_in'));
}

这是我的控制器代码:

<?php
 namespace App\Http\Controllers\Auth;

 use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
 use Socialite;

 class SocialAccountController extends Controller
{
/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('guest');
}
/**
 * Redirect the user to the SNS authentication page.
 *
 * @return Response
 */
public function redirectToProvider($provider)
{
    if ($provider !== 'facebook') {
        return abort(404);
    }

    return Socialite::with($provider)->redirect();
}

public function handleProviderCallback(\App\Models\User $accountService, $provider)
 {
    try {
        $user = Socialite::with($provider)->user();
        $create['name'] = $user->getName();
        $create['email'] = $user->getEmail();
        $create['facebook_id'] = $user->getId();

        $user = $accountService->addNew($create);

        return view ('user.home')->withDetails($user)->withService($provider);
    } catch(Exception $e){
        return redirect('/login');
    }
}
}

我找到了一些答案,但对我来说无效。我现在坚持了2天。我该如何解决这个问题?

【问题讨论】:

    标签: php laravel facebook laravel-socialite


    【解决方案1】:

    当您从 OAuth 提供者(在本例中为 Facebook)获得回调时,将您需要的数据存储到您的数据库中,然后重定向用户到一个帐户页面,或另一个确认链接成功。

    该回调 URL 专门用于 OAuth 提供者提供的凭据。在这些凭据第一次过期后,刷新页面会导致错误。通过强制将用户重定向到另一个页面,他们将无法刷新并导致同样的问题。

    【讨论】:

    • 谢谢你,但我该怎么做呢?
    • 在成功认证后,而不是来自路由的return view('user.home'),而是返回一个重定向到另一个端点。因此,根据您的应用程序中的命名路由,这将是 return redirect()-&gt;route('home') 的效果。
    • 我怎样才能返回它的详细信息?我认为您的解决方案会起作用,但我真的不知道从哪里开始。对这个很陌生:(。
    • 如果您对addNew 的调用在数据库中保存了一个新的用户模型记录,那么您可以通过执行auth()-&gt;login($user) 之类的操作来登录该用户,以便他们拥有一个Laravel 会话。然后您可以使用auth()-&gt;user() 访问用户模型。或者,您可以手动将任何数据放入会话中并以这种方式访问​​它。
    • 如果你用谷歌搜索Socialite InvalidStateException,每一个答案都会告诉你盲目地使用-&gt;stateles() 方法。这个答案是我能找到的唯一一个正确解释了为什么你可能会得到这个异常的可能原因之一。在这种情况下,您需要捕获异常并正确重定向用户。
    【解决方案2】:

    尝试刷新client_secret并运行php artisan cache:clear

    composer dump-autoload。对我来说效果很好。

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 2018-03-22
      • 2018-05-11
      • 2019-10-07
      • 2017-04-28
      • 2023-02-08
      • 2016-11-05
      • 1970-01-01
      • 2021-01-25
      相关资源
      最近更新 更多