我用的是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中。方法,将标题Accept
和content-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);