在Laravel JWT认证中未认证

  • 本文关键字:认证 JWT Laravel php laravel
  • 更新时间 :
  • 英文 :


我用的是jwt-auth。

它在登录时工作得很好,但是当我尝试注册它并通过登录请求时,出现了以下错误:

"message"未经身份验证的!">

源代码如下:

配置/auth.php

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
'hash' => True,
],

路线/api.php:

Route::group([    
'middleware' => 'api',
'namespace' => 'AppHttpControllers',//must include the path
'prefix' => 'auth'

], function ($router) {

Route::post('login', 'AuthController@login');
Route::post('signup', 'AuthController@signup');
Route::post('logout', 'AuthController@logout');
Route::post('refresh', 'AuthController@refresh');
Route::post('me', 'AuthController@me');

});

AuthController.php

public function __construct()
{
$this->middleware('auth:api', ['except' => ['login,signup']]);
}
public function login()
{
$credentials = request(['email', 'password']);
if (! $token = auth()->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return $this->respondWithToken($token);
}
public function signup(Request $request){
$validation = $request->validate([
'email' =>'required',
'name' =>'required',
'password'=>'required|min:6|confirmed',
]);
$data = array();
$data['name'] = $request->name;
$data['email'] = $request->email;
$data['password'] = Hash::make($request->password);
DB::table('users')->insert($data);
return $this->login($request);     

}

我提供了DB哈希类。在postman中,我将路由放在POST中。方法,将标题Acceptcontent-type设置为application/json格式,在正文部分设置x-www-form,并使用confirmation_password key输入所有密钥和值。它没有插入到数据库中,并显示错误消息。我尝试过清除配置缓存和路由缓存。我也尝试过raw和json格式。

我认为你的问题是你的构造器中间件,你没有使except值正确,你必须为except设置不同的值

$this->middleware('auth:api', ['except' => ['login','signup']]);

最好使用create或save方法来存储新用户。在数据库中存储用户之后,可以生成一个用户令牌并将其发送回去。用户已经登录。然后,每个进一步的请求都通过令牌进行调节。

$token = // generate an new token with the JWT toker Helper method ;
return response()->json([
'status' => 'ok',
'token' => $token,
'user' => $user
], 201);

最新更新