博客
关于我
Laravel 6 api 认证
阅读量:795 次
发布时间:2023-01-30

本文共 3885 字,大约阅读时间需要 12 分钟。

开发交流群:375462817

对于API认证系统的开发和使用,我们准备了一份完整的文档,详细说明了从系统设计到实际实现的每个步骤。您可以通过这个交流群获取更多支持和帮助。

1. API 认证原理

我们的API认证系统采用基于令牌的认证机制,充分考虑了用户隐私和数据安全。具体流程如下:

####注册流程:

  • 用户注册时,系统会生成一个80字符长的随机字符串作为token。
  • 原生token返回给用户,用于存储。
  • 哈希后的token保存至数据库。

####登录流程:

  • 用户使用账号和密码登录。
  • 系统生成80字符长的随机token。
  • 原生token返回用户。
  • 哈希后的token保存至数据库。

####认证流程:

  • 将用户传来的token进行哈希处理。
  • 与数据库中哈希后的token进行对比。
  • 对比结果决定是否认证通过。

2. 项目创建与数据库配置

####创建新项目:

  • 使用Composer命令创建Laravel项目:
composer create-project --prefer-dist laravel/laravel=laravel6php

####添加迁移:

  • 运行以下命令添加迁移:
php artisan migrate

####数据库迁移:

  • users表中添加api_token字段:
Schema::table('users', function ($table) {    $table->string('api_token', 80)        ->after('password')        ->unique()        ->nullable()        ->default(null);});

####修改字段名:

  • 如果需要修改api_token字段名,记得更新config/auth.php中的storage_key参数:
'api' => [    'driver' => 'token',    'provider' => 'users',    'hash' => false,    'storage_key' => 'api_token',],

3. 配置请求响应

####设置JSON格式:

  • 创建基请求类:
  • 修改index.php
handle( $request = \App\Http\Requests\BaseRequest::capture());

4. 路由设置

####定义路由:

  • API认证路由配置:
Route::post('/register', 'Auth\ApiController@register');Route::post('/login', 'Auth\ApiController@login');Route::post('/refresh', 'Auth\ApiController@refresh');Route::post('/logout', 'Auth\ApiController@logout');

####生成控制器:

  • 创建API控制器:
middleware('auth')->except(['login', 'register']); } protected function username() { return 'name'; } public function register(Request $request) { $validator = $this->validator($request->all()); if (! $validator->passes()) { return response()->json(['error' => '注册失败,信息格式错误。'], 400); } $api_token = Str::random(80); $data = array_merge($request->all(), ['api_token' => $api_token]); $user = $this->create($data); return compact('api_token'); } protected function validator(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:255', 'unique:users'], 'email' => ['required', 'string', 'email', 'max:255'], 'password' => ['required', 'string', 'min:8', 'confirmed'], ]); } protected function create(array $data) { return User::forceCreate([ 'name' => $data['name'], 'email' => $data['email'], 'password' => password_hash($data['password'], PASSWORD_DEFAULT), 'api_token' => hash('sha256', $data['api_token']), ]); } public function logout() { auth()->user()->update(['api_token' => null]); return ['message' => '已成功退出登录。']; } public function login() { $username = $this->username(); $user = User::where($username, $request->username())->firstOrFail(); if (!password_verify($request->password, $user->password)) { return response()->json(['error' => '账号名或密码错误。'], 403); } $api_token = Str::random(80); $user->update(['api_token' => hash('sha256', $api_token)]); return compact('api_token'); } public function refresh() { $api_token = Str::random(80); auth()->user()->update(['api_token' => hash('sha256', $api_token)]); return compact('api_token'); }}

5. 路由保护

对示例路由应用认证中介件:

Route::post('/register', 'Auth\ApiController@register')    ->middleware('auth:api');Route::post('/login', 'Auth\ApiController@login')    ->middleware('auth:api');

6. 请求与响应示例

  • 使用form_params传递token:
$response = $client->request(    'POST',     '/api/user',     [        'form_params' => [            'api_token' => $token,        ],        'headers' => [            'Accept' => 'application/json'        ]    ]);
  • 使用Bearer令牌传递token:
$response = $client->request(    'POST',     '/api/user',     [        'headers' => [            'Authorization' => 'Bearer ' . $token,            'Accept' => 'application/json'        ]    ]);

通过以上配置,您可以轻松集成基于令牌的API认证系统,保障用户信息的安全性和隐私性。

转载地址:http://uugyk.baihongyu.com/

你可能感兴趣的文章
(AS3)BitmapData.draw比BitmapData.copyPixel能做得更多
查看>>
asp.net MVC 强类型视图表单Ajax提交的注意事项
查看>>
canvas设置文字阴影
查看>>
Centos 5.3 ADSL拨号组建中小型企业网络
查看>>
CentOS 6 时间,时区,设置修改及时间同步
查看>>
Centos 6.3 64bit安装KVM总结
查看>>
CentOS 6.9 yum 和源码安装htop,适用于centOS 7
查看>>
centos 64位 hadoop编译
查看>>
CentOS 7 / RHEL 7 上安装 LAMP + phpMyAdmin
查看>>
CentOS 7 安装 postgreSQL 9.4
查看>>
CentOS 7 巨大变动之 systemd 取代 SysV的Init
查看>>
centos 7 静态IP,指定DNS
查看>>
Centos 7.5 docker 容器怎么设置开机自启
查看>>
Centos 7.5 SSH改别的端口连接不上,只有默认端口才行(未解决)
查看>>
Centos 7.5 如何安装VMware Tools工具
查看>>
CentOS 7.X 系统安装及优化
查看>>
flask框架面向移动端的虚拟物品订购平台毕设源码+论文
查看>>
flask框架飞机订票管理系统(毕设源码+论文)
查看>>
flask框架高校助学及勤工俭学管理系统(毕设源码+论文)
查看>>
flask框架高校图书管理系统设计与实现(毕设源码+论文)
查看>>