BeDragan

460 经验值

方案一: auth.basic

  1. 给需要登录的路由添加auth.basic中间件

  2. 前端登录时采用手动认证, Auth::attemp. 成功则返回用户实例对象.

  3. 前端收到返回的用户实例对象, 存储到cookie中.

  4. 以后访问带有auth.basic的路由时自动带上authentication头部

优点

  • 无状态

  • 不用管理后端的登录状态

缺点

  • 用户名和密码在很多请求的头部出现

解决方法

  • 全站https

方案二: 手动登录

准备工作:
1. user表中添加api_token字段
2. 注册时为用户添加api_token
  1. 给需要登录的路由添加auth和api中间件

  2. 前端登录时采用手动认证, Auth::attemp. 成功则调用Auth::login()手动登录. 并返回用户实例对象.

  3. 前端收到返回的用户实例对象, 存储到cookie中.

  4. 以后访问带有auth和api的路由时带上Authentication: "Bearer ..."头部

  5. 退出登录时调用Auth::logout()

遇到的问题

  • auth中间件默认的行为与预期不符合, 原本应该返回401错误, 实际会自动跳转到login页面(未登录)或者home页面(登录后)

我照着Vuejs视频教程安装并且配置了laravel-cors, 但是访问api返回的response依旧没有cross-origin头.

我确认已经完成了以下步骤:

  1. composer 安装了 barryvdh/laravel-cors

  2. 将BarryvdhCorsServiceProvider::class,添加到了config/app.php providers array

  3. 在api路由里添加了cors中间件, 具体代码为:

Route::get('/users', function (Request $request) {
    return response()->json(['name' => 'Tom']);
})->middleware('cors:api');

在做以上步骤的时候我有两个疑问

  • cors要不要添加到$app->routeMiddleware数组里?

  • 要是我将BarryvdhCorsServiceProvider::class或者'cors'添加到Kernel.php中的$middlewareGroups数组中的api数组里, 是不是只要写了api就可以啦?

以上两个都是次要的, 主要的问题还是想搞清楚, 为什么没起作用.