Laravel+VUE,用 session guard 认证 API,解决错误 Session store not set on request.

这种方式会产生很多问题,后来改用 Passport OAuth 认证了,请忽略本文吧。
使用VUE+Laravel开发时,可以使用普通的session guard进行用户认证,具体使用方法如下:
1、axios中添加http header:

axios = require('axios');
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'
axios.defaults.headers.common['X-CSRF-TOKEN'] = document.head.querySelector(
    'meta[name="csrf-token"]'
).content

2、把session控制器添加到相应的Controll,这时可能会出现这样的错误:
Session store not set on request.
解决这个错误的方法是,把以下代码添加到app/Http/Kernel.php中 api中间件组中:

            \App\Http\Middleware\EncryptCookies::class,          
            \Illuminate\Session\Middleware\StartSession::class,

添加后完整代码如下:

        'api' => [
            \App\Http\Middleware\EncryptCookies::class,          // <------- 添加的代码
            \Illuminate\Session\Middleware\StartSession::class, // <------ 添加的代码
            'throttle:60,1',
            'bindings',
        ],

如果是开发第三方扩展,不想修改app/Http/Kernel.php文件,可以在任何一个ServiceProvider的register()中添加:

    public function register()
    {
        $router = $this->app['router'];
        $router->prependMiddlewareToGroup('api', //<---------添加的代码
            \App\Http\Middleware\EncryptCookies::class
        );
        $router->prependMiddlewareToGroup('api',//<--------添加的代码
            \Illuminate\Session\Middleware\StartSession::class 
        );
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
附言 1  ·  4年前

这种方式会产生很多问题,后来改用Passport OAuth 认证了

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

这种不科学的东西,就不要发了吧!现在还有用这种方式处理的!

4年前 评论

呵呵,是的,谢谢提醒

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!