使用 JWT 进行 laravel 身份验证的 Satellizer 警告“期待一个名为 token 的令牌”

Posted

技术标签:

【中文标题】使用 JWT 进行 laravel 身份验证的 Satellizer 警告“期待一个名为 token 的令牌”【英文标题】:Satellizer Warning "Expecting a token named token" for laravel authentication with JWT 【发布时间】:2016-02-21 05:26:42 【问题描述】:

我正在关注本教程 - https://www.codetutorial.io/laravel-and-angularjs-token-based-auth-part1/。

我通过制作一个单独的 laravel 后端和另一个用于 angular 前端的文件夹对其进行了一些修改。截至目前,我在 localhost 上运行它。

登录到我的应用程序时,我收到以下消息:-

Satellizer Warning Expecting a token named token

Current user is undefined.

我的登录控制器 -

public function authenticate(Request $request)
    $credentials = $request->only('email', 'password');

    try
        if(! $token = JWTAuth::attempt($credentials))
            return response()->json(['error' => 'invalid_credentials'], 401);
        
    
    catch(JWTException $e)
        return response()->json(['error' => 'could_not_create_token'], 500);
    

    return response()->json(compact('token'));


public function getAuthenticatedUser()

    try
        if(! $user = JWTAuth::parseToken()->authenticate())
            return response()->json(['user_not_found'], 404);
        
    
    catch(Tymon\JWTAuth\Exceptions\TokenExpiredException $e)
        return response()->json(['token_expired'], $e->getStatusCode());
    
    catch(Tymon\JWTAuth\Exceptions\TokenInvalidException $e)
        return response()->json(['token_invalid'], $e->getStatusCode());
    
    catch(Tymon\JWTAuth\Exceptions\JWTException $e)
        return response()->json(['token_absent'], $e->getStatusCode());
    

    return response()->json(compact('user'));

Routes.php

Route::post('/api/register', 'RegisterController@register');
Route::post('api/authenticate', 'LoginController@authenticate');
Route::get('api/authenticate/user', 'LoginController@getAuthenticatedUser');

我的角度控制器:-

reglogApp.controller('AuthController', function($scope, $http, $auth, $rootScope, $state)
$scope.email='';
$scope.password='';
$scope.newUser=;
$scope.loginError=false;
$scope.loginErrorText='';

$scope.register = function()
    $scope.name = $scope.newUser.name;
    $scope.email = $scope.newUser.email;
    $scope.password = $scope.newUser.password;
    console.log($scope.name, $scope.email, $scope.password);
    $http.post('http://localhost/lab/reglog/public/api/register', $scope.newUser).success(function(data)
        console.log('Registered');
        $scope.email = $scope.newUser.email;
        $scope.password = $scope.newUser.password;
        $scope.login();
    );


$scope.login = function()
    var credentials = 
        email: $scope.email,
        password: $scope.password
    

    console.log('Entered Login Function', credentials);

    $auth.login(credentials)
        .then(function()
            return $http.get('http://localhost/lab/reglog/public/api/authenticate/user');
        , function(error)
            $scope.loginError = true;
            $scope.loginErrorText = error.data.error;
            console.log('Login Error', $scope.loginErrorText);
        )
        .then(function(response)
            $rootScope.currentUser = response.data.user;
            $scope.loginError = false;
            $scope.loginErrorText = '';
            console.log('Current User', $rootScope.currentUser);
            $state.go('dashboard');
        );

);

【问题讨论】:

【参考方案1】:

Satellizer 期望您的 post 请求 json 中有一个名为“token”的***属性,它不能位于 json 中的另一个对象内,因此它必须位于***:


    token: "<your JWT token>",
    user:
           ...
          

这是我唯一一次遇到此错误。 它还必须包含在对您的 API 的每个经过身份验证的请求中(显然)。

【讨论】:

以上是关于使用 JWT 进行 laravel 身份验证的 Satellizer 警告“期待一个名为 token 的令牌”的主要内容,如果未能解决你的问题,请参考以下文章

使用 laravel 5.1 和 jwt 使用 cookie 进行身份验证

使用 JWT 进行 laravel 身份验证的 Satellizer 警告“期待一个名为 token 的令牌”

没有数据库的 Laravel 中的 JWT 身份验证

Laravel JWT 身份验证错误

Laravel 通过生成的令牌进行身份验证,无需护照和 jwt

当 Laravel 用作客户端时,JWT 存储在哪里进行身份验证?