Nik*_*aut 11 php authentication jwt laravel
我正在尝试将JWT用于laravel网页而不是会话.所以我做了一些改变.
然后api在config/auth.php中更改默认保护
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
...
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
Run Code Online (Sandbox Code Playgroud)现在我收到了错误
(1/1)FatalErrorException在AuthenticatesUsers.php中调用未定义的方法Illuminate\Auth\TokenGuard :: attempt()(第75行)
如何修复此问题并启动laravel网页的令牌身份验证(刀片而不是API).
我在这里找到了解决方案:https ://github.com/tymondesigns/jwt-auth/issues/860
在 /routes/api.php - 添加了一些基本的身份验证路由
Route::post('login', 'Auth\LoginController@login');
Route::get('/user', function (Request $request) {
$user = $request->user();
return dd($user);
})->middleware('auth:api');
Run Code Online (Sandbox Code Playgroud)
在 /app/http/Controller/auth/LoginController.php 中
然后重写登录控制器中的方法
public function login(Request $request)
{
$credentials = $request->only(["email","password"]);
if ($token = $this->guard()->attempt($credentials)) {
return $this->sendLoginResponse($request, $token);
}
$this->incrementLoginAttempts($request);
return $this->sendFailedLoginResponse($request);
}
protected function sendLoginResponse(Request $request, $token)
{
$this->clearLoginAttempts($request);
return $this->authenticated($request, $this->guard()->user(), $token);
}
protected function authenticated(Request $request, $user, $token)
{
setcookie("jwt_token", $token);
return redirect('/');
return response()->json([
'token' => $token,
]);
}
protected function sendFailedLoginResponse(Request $request)
{
return response()->json([
'message' => "not found",
], 401);
}
Run Code Online (Sandbox Code Playgroud)
添加中间件AddToken
public function handle($request, Closure $next)
{
$token = isset($_COOKIE["jwt_token"])?$_COOKIE["jwt_token"]:"";
//$request['token'] = $token;//this is working
$request->headers->set("Authorization", "Bearer $token");//this is working
$response = $next($request);
//$response->header('header name', 'header value');
return $response;
}
Run Code Online (Sandbox Code Playgroud)
在 Kernel.php 中注册中间件
protected $middleware = [
....
\App\Http\Middleware\AddToken::class,
];
Run Code Online (Sandbox Code Playgroud)