我用的laravel5.2.22的版本做认证模块的时候,由于前端用了angular的框架,所以重写了laravel中认证模块的认证部分的代码, 这是背景,但跟我要说的问题没多大关系。
-
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); }
-
同时,我还沿用了laravel本身的认证的中间件
Route::get('/home',['middleware' => 'auth','uses' =>'userController@getInfo']);
接着问题就来了。 laravel 本身的认证给response插的cookie的形式应该不是我重写的那个形式,导致认证登录后,后面的中间件都过不去。
5, 请问一下,laravel自带认证里的cookie的形式是怎么构造的呢。 illuminate 下的代码跳转的晕晕的,IOC还不是很熟练,google一阵子无果。 哪位赐教一下。或者有个链接让我清楚下这个过程中 cookie是在什么时候插入的,auth中间件检测cookie又是那个函数实现的。
$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
多看看官方文档。