【问题标题】:Unauthorized response with valid token使用有效令牌的未经授权的响应
【发布时间】:2019-11-26 05:10:21
【问题描述】:

成功登录后,我对每个请求的响应都未经授权

这是我的一些代码(如果您需要查看其他内容,请告诉我):

ionic 上的数据提供者

this.storageProvider.getToken().then(results => {
                      this.httpOptions = {
                      headers: new HttpHeaders({
                          'Content-Type': 'application/json',
                          'Authorization': 'Bearer ' + results,
                          'Accept': 'application/json',
                        })
                      };
                  });

public getTodayReservations() {
  //all reservations (not todays only)
    let _url = this.url + '/guides/reservations/all';
    return this.http.get(_url, this.httpOptions);
}

这是我的 laravel api 路由的配置:

Route::prefix('v1')
->group(function () {

    Route::post('login', 'Api\UsersController@login');

    Route::middleware('auth:api')
        ->prefix('guides')
        ->group(function () {

            Route::get('/show', 'Api\UsersController@show');

            Route::get('/reservations/today', 'Api\ReservationsController@today');
            Route::get('/reservations/all', 'Api\ReservationsController@allRes');

        });
});

请求标头:

Accept: application/json
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI.....
Content-Type: application/json
Origin: http://localhost:8100
Referer: http://localhost:8100/

【问题讨论】:

    标签: laravel rest api ionic-framework ionic3


    【解决方案1】:

    你可以this.storageProvider.getToken()返回一个承诺而不是一个令牌。

    试试这样的:

    export class HttpService {
    
      private httpOptions;
    
      constructor(){
       this.storageProvider.getToken().then(results => {
            this.httpOptions = {
            headers: new HttpHeaders({
                'Content-Type': 'application/json',
                'Authorization': 'Bearer ' + results,
                'Accept': 'application/json',
              })
            };
        });   
      }
    

    【讨论】:

    • 即使现在我的请求标头现在是:Accept: application/json Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI...... 内容类型:application/json 来源:localhost:8100推荐人:localhost:8100
    【解决方案2】:

    检查this.storageProvider.getToken() 的响应,通常它有access_token 密钥,您应该使用它来授权您的应用,因此您的代码,而不是完整的承诺,因此您的代码将如下所示:

    this.storageProvider.getToken().then(tokenObject => {
        private httpOptions = {
            headers: new HttpHeaders(
                {
                    'Content-Type': 'application/json',
                    'Authorization': 'Bearer ' + tokenObject.access_token,
                    'Accept': 'application/json',
                }
            )
        }; 
    });
    

    当然,在您的情况下,它可能是其他一些密钥,这就是为什么您应该先查看this.storageProvider.getToken(),并且只在发送Authorization 标头时发送实际的访问令牌。

    【讨论】:

    • 我应该在构造函数中添加这个吗?
    • 在你定义了httpOptions 的地方,只需用这个替换你的代码
    • 不能那样做因为它是一个类一个 httpOptions 在我的例子中是一个属性
    • 用 NULL 初始化属性(它实际上是一个属性),然后在构造函数中放入代码来填充该属性,当然你将使用this.httpOptions =
    • 它可以工作,但仍然出现同样的错误“未经授权”检查我编辑帖子的新代码
    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2015-01-24
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 2012-08-20
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多