大约三天了,我无法解决这个问题,我无所不在(文档,stackoverflow等),但是没有运气。
无论如何,我的问题是,每当我向登录api localhost:8000/api/auth/login
发送POST请求时,我总是会收到此错误:
{
"error": "Unauthorized"
}
这是我的请求正文:
{
"email": "demo@demo.demo",
"password": "123321"
}
我遵循了官方文档:https://jwt-auth.readthedocs.io/en/develop/quick-start/
编辑1
请求标头(邮递员):
Content-Type: application/json
路线:
Route::group([
'middleware' => 'api',
'prefix' => 'auth'
], function ($router) {
Route::post('login', 'AuthController@login');
Route::post('logout', 'AuthController@logout');
Route::post('refresh', 'AuthController@refresh');
Route::post('me', 'AuthController@me');
});
位于login
中的 app/Http/Controllers/AuthController.php
函数:
public function login()
{
$credentials = request(['email', 'password']);
if (! $token = auth()->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return $this->respondWithToken($token);
}
编辑2 这是路线列表:
| | GET|HEAD | / | | Closure | web |
| | POST | api/auth/login | | App\Http\Controllers\AuthController@login | api |
| | POST | api/auth/logout | | App\Http\Controllers\AuthController@logout | api,auth:api |
| | POST | api/auth/me | | App\Http\Controllers\AuthController@me | api,auth:api |
| | POST | api/auth/refresh | | App\Http\Controllers\AuthController@refresh | api,auth:api |
编辑3
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
答案 0 :(得分:0)
我遇到了同样的问题,所以我的解决方法是:
1)在app.php
...
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,
2)
代替auth()->attempt($credentials)..
使用
use JWTAuth;
use JWTFactory;
...
public function login(){
...
if (! $token = JWTAuth::attempt(...
3)不要忘记将其他部分更新,例如将'expires_in' => auth()->factory()->getTTL()
更新为
...
'expires_in' => JWTFactory::getTTL() * 60
在这里找到答案-https://github.com/tymondesigns/jwt-auth/issues/1367#issuecomment-340967334
答案 1 :(得分:0)
如果使用Laravel和Vue取消注释,则需要在app.js上进行引导
答案 2 :(得分:0)
对我来说,问题的解决方案是 auth() 期望将加密的密码保存在您的数据库中。
因此,请尝试像这样保存您的密码:
bcrypt($password);