
Laravel 6 api 认证
发布日期:2025-04-04 02:13:18
浏览次数:13
分类:精选文章
本文共 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认证系统,保障用户信息的安全性和隐私性。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月18日 09时28分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
leaflet面采集与面编辑(leaflet篇.7)
2025-04-04
leaflet饼状图(leaflet篇.74)
2025-04-04
LeakCanary使用,案例静态Toast引起的内存泄漏
2025-04-04
Leapin' Lizards
2025-04-04
learn c++(vector and array)
2025-04-04
Learning English With Our Team
2025-04-04
Learning jQuery, 4th Edition 勘误表
2025-04-04
Learning Perl 学习笔记
2025-04-04
Learning Python 008 正则表达式-001
2025-04-04
Learning XNA 4.0 第三章(结尾)
2025-04-04
Leedcode12-word-break-i
2025-04-04
Leedcode3- Max Points on a Line 共线点个数
2025-04-04
Leedcode4-sort listnode 归并排序
2025-04-04
Leedcode6-binary-tree-preorder-traversal
2025-04-04
Leedcode7-binary-tree-postorder-traversal
2025-04-04
Leedcode8-reorder-list
2025-04-04
Leedcode9-linked-list-cycle-i
2025-04-04
Leetcode - Permutations I,II
2025-04-04