当前位置: 首页 > 知识库问答 >
问题:

Laravel Auth simple API始终返回未经授权的401错误

史劲
2023-03-14

这快把我逼疯了...一切都应该是正确的,我总是得到未经授权的错误在我的API路由!

Api.php路由:

Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();

});

注册控制器:

    protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
        'api_token' => Str::random(80),
    ]);
}

数据库:

请求:

接受应用/json设置为:

我也尝试使用jQuery来请求一个查询参数api_key但它也不起作用!!

我搜索了很多,但无法解决这个问题。我有另一个新的应用程序与Laravel和auth,它的作品完美,但这个项目是旧的,我最近更新到Laravel 7,我不知道为什么这不工作。

更多信息:

Im使用php artisan serve为应用程序提供服务。

我的kernel.php:

<?php

名称空间App\Http;

使用照明\Foundation\Http\Kernel作为HttpKernel;

类内核扩展HttpKernel{/***应用程序的全局HTTP中间件堆栈。**这些中间件在对应用程序的每个请求期间运行。**@var array*/protected$middleware=[\App\Http\Middleware\TrustProxies::class\App\Http\Middleware\CheckFormIntenanceMode::class\Illumb\Foundation\Http\Middleware\ValidatePostSize::class\App\Http\Middleware\TrimStrings::class\Illumb\Foundation\Http\Middleware\ConvertEmptyStringsToull::class];

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
        'auth:api',
    ],
];

/**
 * The application's route middleware.
 *
 * These middleware may be assigned to groups or used individually.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    'language' => \App\Http\Middleware\GetRequestLanguage::class,
    'setLocale' => \App\Http\Middleware\SetLocale::class,
];

/**
 * The priority-sorted list of middleware.
 *
 * This forces non-global middleware to always be in the given order.
 *
 * @var array
 */
protected $middlewarePriority = [
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\Authenticate::class,
    \Illuminate\Routing\Middleware\ThrottleRequests::class,
    \Illuminate\Session\Middleware\AuthenticateSession::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \Illuminate\Auth\Middleware\Authorize::class,
];

}

谢谢是你...我希望你能帮我...

共有3个答案

燕宏胜
2023-03-14

这是因为您没有随请求发送授权令牌。

如果您有您的令牌,那么在您的请求头中包括授权

axios({method: 'get', url: 'api/user', headers: {
      'Authorization': 'Bearer ' + yourToken,
    }})
    .then((response)=>{ 
      console.log(response.data)
    })

我之所以这样说,是因为api通常需要额外的步骤才能工作,但如果它在get参数中工作,那么这就是您所需要的

或者更好的是,在默认情况下为所有请求传递它

//js/main.js

axios.defaults.headers.common = {
    'X-CSRF-TOKEN': your_csrfToken,
    'X-Requested-With': 'XMLHttpRequest',
    'Authorization': 'Bearer ' + yourToken,
    
};
张心水
2023-03-14

我找到了解决办法。

当我从Laravel 6升级到7时,我没有在auth.php改变这个:

“散列”=

        'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],

邹京
2023-03-14

你只需要在邮递员中发送你的令牌作为正文,就像这个通过邮递员发送身份验证的示例图片一样,你必须在正文中发送你的令牌(表单数据),并且令牌的密钥必须api_token

 类似资料:
  • 所以,我试图用Tweepy喜欢一个推文,但是这个错误正在发生: 有什么想法吗?

  • 我正在使用postman,并尝试通过http://localhost:8180/auth/admin/realms/demo/users/{userID}更新用户的配置文件,但收到响应。 通过http://localhost:8180/auth/admin/realms/demo/users/{userID}发送带有Json内容类型和用户信息的Put请求。 不幸的是,我已经连续收到了401个回复。

  • 我的代码:GoogleCredential凭据 credential.refreshToken() 错误日志: 创建服务号的步骤: 我在凭据中的oauth 2.0中创建了一个Web应用程序 然后我用客户端ID创建了一个服务号 现在我正在使用这个服务号和从它生成的p12证书来验证和创建Google凭据的对象 一旦刷新令牌,我就给了我401例外。 在这种情况下,任何帮助都会受到感激

  • 问题内容: 我正在使用GCM服务从服务器推送信息。如果我使用浏览器密钥,它将成功消息显示为: {“ multicast_id”:4849013215736515938,“ success”:1,“ failure”:0,“ canonical_ids”:0,“ results”:[{“ message_id”:“ 0: 1348742583011905%2adac3a0f9fd7ecd“}]},

  • 在这个留档Spring Security MVC Test中描述了如何使用Spring Security测试安全的ressource。我遵循了提供的所有步骤,但访问受保护的ressource仍然会返回错误代码401(未经授权)。 这是我的测试课 我的资源服务器配置: 如果你想看看整个项目,你可以在这里找到。我已经尝试了不同的测试运行程序和教程中描述的所有内容,但我找不到一个解决方案,如何在测试期间

  • 我使用spring ide在本地机器嵌入式apache服务器上部署了spring boot web应用程序,并访问了一个带有错误令牌的url,在这种情况下,它会返回未经授权的访问错误401和托管异常处理抛出的特定错误消息,而如果我在独立但相同的apache服务器上部署相同的应用程序,它会给我500个内部服务器错误而不是401或任何其他服务器端错误。 我捕获的日志只有以下一行不同: 下面是我用来处理