laravel JWT登录时返回“错误”:“未经授权”

时间:2018-11-21 01:49:56

标签: laravel jwt

大约三天了,我无法解决这个问题,我无所不在(文档,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']),
        ]);
    }

3 个答案:

答案 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);