鍍金池/ 問答/PHP/ laravel5.5 api.php 里面的路由,走中間件的時候提示未授權(quán) 4

laravel5.5 api.php 里面的路由,走中間件的時候提示未授權(quán) 401?

我們這個項目進(jìn)行了半年了,以前沒問題,上周六開始所有接口就提示file ,

項目信息:
laravel5.5,前臺使用控制器加載頁面(return view()),后臺使用iview-admin,node做服務(wù)器請求laravel的api.php 中的接口;前臺頁面中獲取登錄信息正常;登錄功能是采用了oAuth登錄了集團(tuán)平臺。

為了確保后端邏輯也實際業(yè)務(wù)沒有問題,貼出在blade模板中的php代碼

    <script type="text/javascript">
        <?php
        $user = \Auth::user();
        $contact = new ArrayObject();
        if ($user) {
            $user->setVisible([
                'user_id',
                'username',
                'name',
                'avatar'
            ]);
            // 對應(yīng)的聯(lián)系人
            $_contact = $user->contact();

            if ($_contact) {
                $_contact->setVisible([
                    'contact_id',
                    'name',
                    'is_admin',
                    'is_sub_admin'
                ]);

                $contact = $_contact->toArray();

            } else {

            }

            $user = $user->toArray();
        } else {
            $user = new ArrayObject();
        }

        $corp = \XXH::corp();
        if ($corp) {
            $corp->setVisible([
                'corp_id',
                'user_id',
                'logo',
                'name',
                'type',
                'code'
            ]);
            $corp = $corp->toArray();
        } else {
            $corp = new ArrayObject();
        }
        $data = [
            'baseUrl' => url('/'),
            'state' => [
                'user' => $user,
                'contact' => $contact,
                'corp' => $corp
            ],
        ];
        echo 'window.XXH = ' . json_encode($data);
        ?>
    </script>

以下是輸出:

clipboard.png

報錯詳細(xì)信息

  "exceptions": {
    "count": 1,
    "exceptions": [
      {
        "type": "Illuminate\\Auth\\AuthenticationException",
        "message": "Unauthenticated.",
        "code": 0,
        "file": "D:\\jeff\\code\\jianwen\\vendor\\laravel\\framework\\src\\Illuminate\\Auth\\Middleware\\Authenticate.php",
        "line": 66,
        "surrounding_lines": [
          "            }\n",
          "        }\n",
          "\n",
          "        throw new AuthenticationException('Unauthenticated.', $guards);\n",
          "    }\n",
          "}\n"
        ],
        "xdebug_link": null
      }
    ]
  },


應(yīng)對回答者的需要,貼出auth代碼

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option controls the default authentication "guard" and password
    | reset options for your application. You may change these defaults
    | as required, but they're a perfect start for most applications.
    |
    */

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | here which uses session storage and the Eloquent user provider.
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | Supported: "session", "token"
    |
    */

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            // jhc 修改
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | JUser Providers
    |--------------------------------------------------------------------------
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,//jhc 修改
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expire time is the number of minutes that the reset token should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

    // jhc 添加
    'agent' => [

        'agent_id' => env('AUTH_AGENT_ID', ''),
        'redirect_url' => env('AUTH_REDIRECT_URL', ''),
        'platform_url' => env('AUTH_PALTFORM_URL', ''),
        'gateway_url' => env('AUTH_GATEWAY_URL', ''),
        'corp_user_api' => 'auth_user',
        'corp_token_api' => 'corp_tokens',
        'corp_info' => 'auth_corp',
        'token' => env('AUTH_TOKEN', ''),
        'encoding_key' => env('AUTH_ENCODING_KEY', '')
    ],

];
回答
編輯回答
奧特蛋

這個錯誤常見情況就是 passport 模式下 token 無效提示的,造成無效可能的情況

  1. token 過期
  2. token 的加密證書被更換了, oauth-private.key 和 oauth-public.key 兩個文件。

請確認(rèn)以上兩個可能性,以及貼出 config/auth.php 下的代碼。

2018年2月2日 05:07