在这个 Laravel api 身份验证教程中,我将向您展示 laravel 自定义 api 身份验证示例。我们可以很容易地使用 Laravel passport 或 JWT 创建 api 身份验证。但在这个示例中,我将向您展示使用自定义令牌创建 api 身份验证示例的方法,而无需使用passport 和 jwt。
所以希望,从本教程中,您将学习如何创建 laravel api 身份验证令牌教程。因此,如果您不知道如何创建基于令牌的 api 身份验证,那么此示例适合您。我将使用 Laravel 9 新应用程序来创建这个 Laravel 9 令牌 api 身份验证示例。
所以在这个 laravel 令牌认证中,我将向你展示使用自定义认证的login,register和logout系统。那么让我们看看如何创建基于 Laravel 9 自定义令牌的 api 身份验证示例。
第 1 步:安装 Laravel
composer create-project --prefer-dist laravel/laravel ApiAuth
第 2 步:修改 Auth.php
由于我们要创建一个没有护照或 jwt 的基于自定义令牌的 API 身份验证示例,我们需要配置 auth.php 文件,如下所示:
配置/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
第 3 步:创建迁移
在这一步中,我们需要更新users表和User模型来创建 API 令牌认证。所以更新如下:
app/Models/User.php
namespace App\Models;
use App\Helper\Tokenable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable, Tokenable;
protected $fillable = [
'name',
'email',
'password',
'image'
];
protected $hidden = [
'password',
'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
public function saveUser($request) : self
{
$this->name = $request->name;
$this->email = $request->email;
$this->password = bcrypt($request->password);
$this->save();
return $this;
}
}
And now update the database like:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('api_token')->nullable();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
};
现在运行php artisan migrate
命令来更新迁移。
第 4 步:创建可标记的特征
现在我们必须创建一个自定义可标记特征来生成自定义 api_token 用于用户 api 身份验证。所以像下面这样创建它:
app\Helper\Tokenable.php
namespace App\Helper;
use Illuminate\Support\Str;
Trait Tokenable
{
public function generateAndSaveApiAuthToken()
{
$token = Str::random(60);
$this->api_token = $token;
$this->save();
return $this;
}
}
第 5 步:创建路由
现在在这一步中,我们必须为基于自定义令牌的 api 身份验证示例创建 api 路由。所以像这样创建它:
routes/api.php
use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;
Route::post('register',[AuthController::class,'register']);
Route::post('login',[AuthController::class,'login']);
Route::group(['middleware' => ['auth:api']], function () {
Route::post('logout', [AuthController::class, 'logout']);
});
第 6 步:创建控制器
现在在最后一步,我们必须创建 AuthController 来完成登录、注册和注销等方法。
app\Http\Controllers\AuthController.php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
public function register(Request $request, User $user)
{
return $user->saveUser($request)
->generateAndSaveApiAuthToken();
}
public function login(Request $request)
{
$credentials = [
'email' => $request->email,
'password' => $request->password,
];
if (Auth::guard('web')->attempt($credentials)) {
$user = Auth::guard('web')
->user()
->generateAndSaveApiAuthToken();
return $user;
}
return response()->json(['message' => 'Error.....'], 401);
}
public function logout(Request $request)
{
$user = Auth::guard('api')->user();
if ($user) {
$user->api_token = null;
$user->save();
}
return response()->json(['Success' => 'Logged out'], 200);
}
}
一切都准备好了。现在运行php artisan serve
命令并测试我们的 api,如下所示:
注册
http://127.0.0.1:8000/api/register
如下输出:
登录
http://127.0.0.1:8000/api/login
注销
http://127.0.0.1:8000/api/logout
希望这篇 Laravel 令牌 api 认证教程对你有所帮助。
The Posts
- Laravel 9 基于自定义令牌的 Api 身份验证教程May 14, 2022
- 使用Laravel9的Sanctum REST API 身份验证示例May 14, 2022
- Laravel9的HttpBasicAuth基本认证May 9, 2022