如果想快速上手,laravel提供了一个只需几行命令就可以为我们生成一个登录注册功能的功能。
首先我们需要安装
1 |
composer require laravel/ui |
在运行
1 |
php artisan ui vue --auth |
1 |
npm install |
1 |
npm run dev |
你就会得到一个新的程序。
别忘了:
1 |
php artisan migrate --force |
上面的命令给我们生成数据库
来到浏览器输入:http://your-app.test/register
如果你不喜欢注册页面,或者你不想让人注册你的网站,你可以禁用它:
1 2 |
/* routes\web.php */ Auth::routes(['register' => false]); |
在路由中添加‘register’=>false即可禁用,其他的都可以禁用。
Laravel 5.3+ 开始,添加了Auth()::routes()
路径组,其中注册了常见的验证路径,例如注册,登录登出,以及密码修改。
在vendor\laravel\framework\src\Illuminate\Routing\Router.php文件的auth方法中你可以看到这些路径。
路由的注册在\vendor\laravel\framework\src\Illuminate\Support\Facades\Auth.php中
api方式
Laravel给我们提供了一个简单的token方式。来完成api认证,真的很棒。
首先我们要在数据库的user表中添加一个api_token的字段。
新建一个迁移文件
1 |
php artisan make:migration update_user |
添加代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class UpdateUser extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function ($table) { $table->string('api_token', 80)->after('password') ->unique() ->nullable() ->default(null); }); } /** * Reverse the migrations. * * @return void */ public function down() { // } } |
执行入库操作:
1 |
php artisan migrate --force |
创建Token
第一种 明文创建
来到app\Http\Controllers\Auth\RegisterController.php
添加 ‘api_token’ => Str::random(80),
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Str; /** * Create a new user instance after a valid registration. * * @param array $data * @return \App\User */ protected function create(array $data) { return User::forceCreate([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'api_token' => Str::random(80), ]); } |
第二种 哈希的token
我们应该使用SHA-256哈希来加密token。
来到config/auth.php,修改 hash ==true
1 2 3 4 5 |
'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => true, ], |
这句话用来在get或者post请求路径时,路由中间件auth:api,查看权限时使用,他会自动哈希加密,用来比对数据库使用。
下面是token过期,后重新更新token并加密的方式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Str; class ApiTokenController extends Controller { /** * Update the authenticated user's API token. * 客户端登录时使用 * 输入用户名和密码登录后,获取user * 在通过user拿到apitoken并返回给客户端 * 客户端记忆token * * @param \Illuminate\Http\Request $request * @return array */ public function update(Request $request) { $token = Str::random(80); $request->user()->forceFill([ 'api_token' => hash('sha256', $token), ])->save(); return ['token' => $token]; } } |
如果你在注册页面加入可以改写代码为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/** * Create a new user instance after a valid registration. * * @param array $data * @return \App\User */ protected function create(array $data) { $token = Str::random(80); return User::forceCreate([ 'name' => $token, 'email' => $data['email'], 'password' => Hash::make($data['password']), 'api_token' => hash('sha256', $token), ]); } |
我们把未哈希的token ,让客户端记住(这里为了方便我把未哈希的token存储为用户名了),将哈希加密的token,存入数据库中的api_token中。
测试一下:
我们要用Insomnia模仿客户端,安装
https://insomnia.rest/download/#windows
我们使用
Bearer Token 方式访问
成功!!