laravel 5.2.22 认证登录的问题。

  1. 我用的laravel5.2.22的版本做认证模块的时候,由于前端用了angular的框架,所以重写了laravel中认证模块的认证部分的代码, 这是背景,但跟我要说的问题没多大关系。

  2. authcontroller中,我重写了authenticated这个函数。大致如下。

    public function authenticated($request,$user){
        $session_id = session()->getId();
        $result = ['status' => 200,'info' => 'login success'];
        return response($result)->cookie('laravel_session',$session_id);
    }
  3. 同时,我还沿用了laravel本身的认证的中间件

    Route::get('/home',['middleware' => 'auth','uses' =>'userController@getInfo']);
  4. 接着问题就来了。 laravel 本身的认证给response插的cookie的形式应该不是我重写的那个形式,导致认证登录后,后面的中间件都过不去。

5, 请问一下,laravel自带认证里的cookie的形式是怎么构造的呢。 illuminate 下的代码跳转的晕晕的,IOC还不是很熟练,google一阵子无果。 哪位赐教一下。或者有个链接让我清楚下这个过程中 cookie是在什么时候插入的,auth中间件检测cookie又是那个函数实现的。

阅读 2.6k
1 个回答

$response->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
或者
Cookie::queue($name, $value, $minutes, ...); return $response;

文档:https://laravel.com/docs/5.2/...

一般在 app/Http/Kernel.php 定义了公共的 middleware,比如把cookie放到响应header里 Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse

如何认证要看你是什么哪个 auth guard,认证由 Illuminate\Auth\AuthManager 管理,它根据配置文件创建对应的 auth guard。比如 session 验证,由 Illuminate\Auth\SessionGuard 实现。
AuthManager 出了管理这些 guard 外的其它方法都是自动调用到 对应的 guard 里。
大多数 guard 都有个很重要的方法 user,这个方法担任检查、获取、缓存当前用户,通知登录事件等。比如 SessionGuard,它的 user 方法就是根据 cookie 里 sessionId 拿到 session 数据,然后检查合法性,然后从 UserProvider(比如数据库)获取用户实例。

有关session 存取的文件是 Illuminate\Session\SessionManager Illuminate\Session\Store

多看看官方文档。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题