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认证系统,保障用户信息的安全性和隐私性。

上一篇:laravel 6 内置 web 认证
下一篇:Laravel 5.x Illuminate\Http\Request 类 offsetSet(),merge(),replace() 方法的区别

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月18日 09时28分31秒