Laravel Auth::login 不被尊重
Posted
技术标签:
【中文标题】Laravel Auth::login 不被尊重【英文标题】:Laravel Auth::login not respected 【发布时间】:2020-03-18 13:57:31 【问题描述】:我正在使用第三方身份验证服务。当他们完成对用户的身份验证后,他们将通过auth/callback/session
向我发送一个 POST 请求。在确认一个有效的请求并使用Auth::login($user)
获取关联的User
之后,然后广播到推送器让前端知道它可以将用户重定向到/dashboard
。
public function callback($sessionId)
// ...
if($user)
Auth::login($user);
broadcast(new CompletedThirdPartyAuthentication($sessionId));
但是,用户不会到达仪表板,而是被重定向到/login
。 Auth::login
返回null
,所以我假设登录成功。我错过了什么?或者我该如何进一步调试?
另外,这是/dashboard
上的中间件:
<?php
namespace App\Http\Middleware;
use Closure;
class LoggedinMiddleware
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
#if (!$request->user())
$user = \Auth::user();
if (!$user)
return redirect('/');
return $next($request);
更新
我显然对会话的工作方式感到困惑:如果我添加一个相同的 GET
回调路由并在新的浏览器选项卡中手动访问它 - 它可以工作。类似:https://app.test/auth/provider/callback/aosdvnapodvnaivnnodninasodvnnadvonon?id=asfbuauosfb
。看来我只能在来自同一客户端的会话中使用。我在这里有什么替代方案?
【问题讨论】:
【参考方案1】:Api-routes 通常使用另一个驱动程序然后是 web-routes。所以在 api-routes 下进行的身份验证在 web-routes 下不起作用。更改 config/auth.php
中的设置以使用相同的驱动程序(会话)。
See docs for auth
【讨论】:
谢谢,在我的例子中,API 有零个中间件,只是一个前缀,无论如何都把它移到外面来确定。以上是关于Laravel Auth::login 不被尊重的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 55 - Passport & Vue - auth/login/logout
laravel 5.1 authlogin 那些控制器方法在哪里?