bedlate / laravel-jwt
为Laravel的JSON Web Token认证
0.0.2
2019-05-21 04:38 UTC
Requires
- lcobucci/jwt: ^3.2
This package is auto-updated.
Last update: 2024-09-21 20:20:47 UTC
README
为Laravel的JSON Web Token认证
安装
1. 运行以下命令以拉取最新版本
composer require bedlate/laravel-jwt
2. 添加服务提供者(Laravel 5.4或以下版本)
'providers' => [
...
bedlate\JWT\JWTServiceProvider::class,
]
3. 发布配置
php artisan vendor:publish --provider="bedlate\JWT\JWTServiceProvider"
4. 生成密钥
php artisan jwt:keygen
使用方法
1. 配置Auth guard
在config/auth.php文件中,你需要添加一个guard。
'guards' => [
...
'jwt' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
2. 添加一些基本认证路由
这样你就可以将auth:jwt
中间件添加到任何你喜欢的路由中。
Route::group([
'middleware' => 'auth:jwt',
'prefix' => 'auth'
], function ($router) {
Route::post('refresh', 'AuthController@refresh');
Route::post('user', 'AuthController@user');
});
Route::post('login', 'AuthController@login');
3. 创建AuthController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
/**
* which auth guard we use
* @return mixed
*/
private function guard() {
return Auth::guard('jwt');
}
/**
* Get token by credentials
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function login(Request $request) {
$email = $request->get('email');
$password = $request->get('password');
if (! $token = $this->guard()->attempt(compact('email', 'password'))) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return $token;
}
/**
* refresh token
* @return mixed
*/
public function refresh() {
return $this->guard()->refresh();
}
/**
* get current login user
* @return mixed
*/
public function user() {
return $this->guard()->user();
}
}
4. 通过凭证获取令牌
你现在应该可以使用一些有效的凭证向登录端点(例如 https://:8000/auth/login)发送POST请求,并看到类似以下响应
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTE4NjUyNDgsInVpZCI6MX0.GaEEUgZF65r59lY4EicmHwg3ei61DQkZN1Zm_HzFPYg",
"expire": 1551865248
}
这个令牌可以用来向你的应用程序发送已认证的请求。
并且不要忘记在expire
之前通过向登录端点(例如 https://:8000/auth/refresh)发送POST请求来刷新令牌
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTE4NjYwNjUsInVpZCI6MX0.UZQNLqn9L6H7yF5m-GczxYgMCJyjGueI6CslMfokKLc",
"expire": 1551866065
}
5. 客户端认证请求
你可以使用Authorization header
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJh...
或Query string parameter
https:///user?_token=eyJ0eXAiOiJKV1QiLCJh...
你可以将_token
更改为其他值,只需在.env
中更改JWT_QUERY