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));
    

但是,用户不会到达仪表板,而是被重定向到/loginAuth::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 Auth登录视图

Laravel 身份验证

laravel 5.1 authlogin 那些控制器方法在哪里?

Laravel 5.2 Auth 登录有效,Auth::check 失败

laravel日常小问题