【发布时间】:2019-11-07 12:29:50
【问题描述】:
我想使用 JWT 登录我的 API,但它总是给我 错误:“未经授权”。
在此之前,我在尝试登录之前已经在我的数据库中注册了用户的电子邮件和密码
这是我的代码:
class UserController extends Controller
{
public function __construct()
{
$this->middleware('auth:api', ['except' => 'login']);
}
public function login(Request $request) {
$validator = Validator::make($request->all(), [
'email' => 'required|email|max:255',
'password' => 'required|string|min:6|max:255',
]);
if($validator->fails()) {
return response()->json([
'status' => 'error',
'messages' => $validator->messages()
], 200);
}
if (! $token = auth()->attempt(['email' => $request->email, 'password' => $request->password])) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return $this->respondWithToken($token);
}
protected function respondWithToken($token) {
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => Auth::guard()->factory()->getTTL() * 60
]);
}
/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\Guard
*/
public function guard()
{
return Auth::guard('api');
}
这是我在 config/auth.php 中的守卫和默认设置:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
这是我使用 VueJs 进行登录的前端:
axios.post('http://localhost:8000/api/login', loginData)
.then(response => {
console.log(response)
})
.catch(error => {
commit('loginStop', error.response.data.error);
commit('updateAccessToken', null);
console.log(error.response);
})
这是我的 web.php:
Route::group(['prefix' => 'api'], function() {
Route::post('/register', 'UserController@register');
Route::post('/login', 'UserController@login');
});
【问题讨论】:
-
您是否在 Authentication 标头中根据您的请求传递令牌?您的请求是否也有 Accept: application/json 标头?
-
@mdexp 我没有使用邮递员
-
如果可以,您可以将发出请求的相关代码发布到您的后端吗?
-
@mdexp 我已经发布了。这只是使用 axios 的简单请求
-
您是否手动将用户注册到数据库中?
标签: php laravel authentication jwt