Laravel实现ApiToken认证请求

作者:jack 时间:2023-11-24 10:35:48 

1.打开 database/migrations/2014_10_12_000000_create_users_table.php 这个 migration 文件, 我们需要更改 user 表的结构

2.我们需要为 user 表添加 api_token 字段, 也就是说我们的 token 是保存在数据库中的, 在合适的位置, 添加一行


$table->string('api_token', 60)->unique();

3.配置好数据库, 通过 php artisan migrate 命令生成 user 表

4.在user表中, 随便添加一条记录, 只要保证 api_token 这个字段设置为 123456 即可. 这样我们就生成了一个用户, 等下就可以 使用 123456 这个token 值来登录了.

5.返回到 路由文件 routes.php, 在里面添加一条测试路由, 并将其 用 laravel 的中间件保护起来


Route::group(['middleware' => ['auth.api']], function () {
Route::get('/t', function () {
 return 'ok';
});
});

在此处, 使用的是 auth.api 中间件,中间件定义入下图:

Laravel实现ApiToken认证请求

在Middleware文件创建WebToken.php,然后在Kernel.php文件中注册该中间件


'auth.api' => \App\Http\Middleware\webToken::class,

6.打开刚刚创建的webToken中间件代码如下


<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class webToken
{
/**
 * Handle an incoming request.
 *
 * @param \Illuminate\Http\Request $request
 * @param \Closure $next
 * @return mixed
 */
public function handle($request, Closure $next)
{
 if (Auth::guard('api')->guest()) {
  return response()->json(['code' => 401,'msg' => '未设置token']);
 }

return $next($request);
}
}

代码中的Auth::guard(‘api')的api是config文件夹里auth.php文件

Laravel实现ApiToken认证请求

Laravel实现ApiToken认证请求

7.做了以上修改之后, 当我们以 /t 这个 url 路径向服务器直接发起请求时, 服务器就会返回一个 401 错误, 并且会返回一条 ‘未设置token' 这样的消息, 这也是我们之前在 handle() 方法中设置的. 也就是说 /t 已经被我们的 auth 中间件保护起来了. 如果想要我们的请求能够正常通过这个中间件, 就要提供 token.

8.由于我们之前在 user 表中添加了一条 api_token 为 123456 的数据, 所以现在我们再次向服务器请求 /t, 但是这次我们加入 api_token, 也就是

…/t?api_token=123456

正常情况下, 服务器就会返回 ‘ok' 了, 这也就是说明, auth 中间件允许这个请求通过. 而当我们把 123456 修改为其他值时, 这个请求也是无法通过 auth 中间件的.

来源:https://blog.csdn.net/weixin_43488988/article/details/83383911

标签:Laravel,Api,Token,认证
0
投稿

猜你喜欢

  • Golang设计模式之适配器模式详细讲解

    2024-05-28 15:22:53
  • python使用tqdm模块处理文件阅读进度条显示

    2022-09-08 11:29:17
  • python读取并绘制nc数据的保姆级教程

    2023-11-23 02:19:24
  • win10安装Sql Server 2014图文教程

    2024-01-16 16:47:34
  • Python字符串逐字符或逐词反转方法

    2022-12-24 21:14:45
  • Python 调用C++封装的进一步探索交流

    2022-10-29 22:43:43
  • Python实现轻松切割MP3文件

    2023-09-23 21:40:32
  • Redis持久化机制实现原理和流程

    2021-03-22 00:43:39
  • css基础教程布局篇之一

    2008-07-31 17:21:00
  • 浅析数据完整性问题

    2007-10-07 12:44:00
  • Perl哈希表用法解析

    2023-08-23 19:12:48
  • Python全栈之进程和守护进程

    2021-11-25 18:05:44
  • SQL触发器定义与使用

    2024-01-28 09:21:27
  • MySQL备份与恢复之热备(3)

    2024-01-21 04:50:04
  • Python爬虫定时计划任务的几种常见方法(推荐)

    2021-06-02 02:05:39
  • ORACLE ORA-01653: unable to extend table 的错误处理方案(oracle报错)

    2024-01-15 12:24:10
  • 升级keras解决load_weights()中的未定义skip_mismatch关键字问题

    2022-12-27 03:58:07
  • SQL SERVER 分组求和sql语句

    2024-01-13 04:43:16
  • Pandas数据集的分块读取的实现

    2021-02-03 07:52:24
  • python实现K近邻回归,采用等权重和不等权重的方法

    2021-12-21 19:29:26
  • asp之家 网络编程 m.aspxhome.com