Laravel护照8.4返回401未授权

时间:2020-04-19 14:24:20

标签: vue.js laravel-passport laravel-7

我正在使用Laravel 7和laravel护照8.4。我可以登录并返回访问令牌,但是当我尝试获取用户详细信息时,我遇到了未经授权的401。我正在使用带有laravel护照密码客户端的vue js。

这是我的用户模型

 <?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable implements MustVerifyEmail
{
    use HasApiTokens, Notifiable, SoftDeletes ;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password','phone_number','date_of_registration'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
}

这是我的AuthServiceProvider.php

<?php

namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
use Laravel\Passport\Passport;
use Carbon\Carbon;


class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
         'App\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
        Passport::routes();
        Passport::tokensExpireIn(Carbon::now()->addMinutes(5));
        Passport::refreshTokensExpireIn(Carbon::now()->addDays(10));
    }
}

这是我的config / auth.php

<?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' => [
            'driver' => 'passport',
            'provider' => 'users',
            //'hash' => false,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | User 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\User::class,
        ],

        // '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,
            'throttle' => 60,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Password Confirmation Timeout
    |--------------------------------------------------------------------------
    |
    | Here you may define the amount of seconds before a password confirmation
    | times out and the user is prompted to re-enter their password via the
    | confirmation screen. By default, the timeout lasts for three hours.
    |
    */

    'password_timeout' => 10800,

];

这是我的config / app.php

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Application Name
    |--------------------------------------------------------------------------
    |
    | This value is the name of your application. This value is used when the
    | framework needs to place the application's name in a notification or
    | any other location as required by the application or its packages.
    |
    */

    'name' => env('APP_NAME', 'Events'),

    /*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services the application utilizes. Set this in your ".env" file.
    |
    */

    'env' => env('APP_ENV', 'production'),

    /*
    |--------------------------------------------------------------------------
    | Application Debug Mode
    |--------------------------------------------------------------------------
    |
    | When your application is in debug mode, detailed error messages with
    | stack traces will be shown on every error that occurs within your
    | application. If disabled, a simple generic error page is shown.
    |
    */

    'debug' => (bool) env('APP_DEBUG', false),

    /*
    |--------------------------------------------------------------------------
    | Application URL
    |--------------------------------------------------------------------------
    |
    | This URL is used by the console to properly generate URLs when using
    | the Artisan command line tool. You should set this to the root of
    | your application so that it is used when running Artisan tasks.
    |
    */

    'url' => env('APP_URL', 'http://localhost'),

    'asset_url' => env('ASSET_URL', null),

    /*
    |--------------------------------------------------------------------------
    | Application Timezone
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default timezone for your application, which
    | will be used by the PHP date and date-time functions. We have gone
    | ahead and set this to a sensible default for you out of the box.
    |
    */

    'timezone' => 'UTC',

    /*
    |--------------------------------------------------------------------------
    | Application Locale Configuration
    |--------------------------------------------------------------------------
    |
    | The application locale determines the default locale that will be used
    | by the translation service provider. You are free to set this value
    | to any of the locales which will be supported by the application.
    |
    */

    'locale' => 'en',

    /*
    |--------------------------------------------------------------------------
    | Application Fallback Locale
    |--------------------------------------------------------------------------
    |
    | The fallback locale determines the locale to use when the current one
    | is not available. You may change the value to correspond to any of
    | the language folders that are provided through your application.
    |
    */

    'fallback_locale' => 'en',

    /*
    |--------------------------------------------------------------------------
    | Faker Locale
    |--------------------------------------------------------------------------
    |
    | This locale will be used by the Faker PHP library when generating fake
    | data for your database seeds. For example, this will be used to get
    | localized telephone numbers, street address information and more.
    |
    */

    'faker_locale' => 'en_US',

    /*
    |--------------------------------------------------------------------------
    | Encryption Key
    |--------------------------------------------------------------------------
    |
    | This key is used by the Illuminate encrypter service and should be set
    | to a random, 32 character string, otherwise these encrypted strings
    | will not be safe. Please do this before deploying an application!
    |
    */

    'key' => env('APP_KEY'),

    'cipher' => 'AES-256-CBC',

    /*
    |--------------------------------------------------------------------------
    | Autoloaded Service Providers
    |--------------------------------------------------------------------------
    |
    | The service providers listed here will be automatically loaded on the
    | request to your application. Feel free to add your own services to
    | this array to grant expanded functionality to your applications.
    |
    */

    'providers' => [

        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
        Illuminate\Bus\BusServiceProvider::class,
        Illuminate\Cache\CacheServiceProvider::class,
        Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
        Illuminate\Cookie\CookieServiceProvider::class,
        Illuminate\Database\DatabaseServiceProvider::class,
        Illuminate\Encryption\EncryptionServiceProvider::class,
        Illuminate\Filesystem\FilesystemServiceProvider::class,
        Illuminate\Foundation\Providers\FoundationServiceProvider::class,
        Illuminate\Hashing\HashServiceProvider::class,
        Illuminate\Mail\MailServiceProvider::class,
        Illuminate\Notifications\NotificationServiceProvider::class,
        Illuminate\Pagination\PaginationServiceProvider::class,
        Illuminate\Pipeline\PipelineServiceProvider::class,
        Illuminate\Queue\QueueServiceProvider::class,
        Illuminate\Redis\RedisServiceProvider::class,
        Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
        Illuminate\Session\SessionServiceProvider::class,
        Illuminate\Translation\TranslationServiceProvider::class,
        Illuminate\Validation\ValidationServiceProvider::class,
        Illuminate\View\ViewServiceProvider::class,

        /*
         * Package Service Providers...
         */
        //Auth0\Login\LoginServiceProvider::class,
        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
        Laravel\Passport\PassportServiceProvider::class,

    ],

    /*
    |--------------------------------------------------------------------------
    | Class Aliases
    |--------------------------------------------------------------------------
    |
    | This array of class aliases will be registered when this application
    | is started. However, feel free to register as many as you wish as
    | the aliases are "lazy" loaded so they don't hinder performance.
    |
    */

    'aliases' => [

        'App' => Illuminate\Support\Facades\App::class,
        'Arr' => Illuminate\Support\Arr::class,
        'Artisan' => Illuminate\Support\Facades\Artisan::class,
        'Auth' => Illuminate\Support\Facades\Auth::class,
        'Blade' => Illuminate\Support\Facades\Blade::class,
        'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
        'Bus' => Illuminate\Support\Facades\Bus::class,
        'Cache' => Illuminate\Support\Facades\Cache::class,
        'Config' => Illuminate\Support\Facades\Config::class,
        'Cookie' => Illuminate\Support\Facades\Cookie::class,
        'Crypt' => Illuminate\Support\Facades\Crypt::class,
        'DB' => Illuminate\Support\Facades\DB::class,
        'Eloquent' => Illuminate\Database\Eloquent\Model::class,
        'Event' => Illuminate\Support\Facades\Event::class,
        'File' => Illuminate\Support\Facades\File::class,
        'Gate' => Illuminate\Support\Facades\Gate::class,
        'Hash' => Illuminate\Support\Facades\Hash::class,
        'Http' => Illuminate\Support\Facades\Http::class,
        'Lang' => Illuminate\Support\Facades\Lang::class,
        'Log' => Illuminate\Support\Facades\Log::class,
        'Mail' => Illuminate\Support\Facades\Mail::class,
        'Notification' => Illuminate\Support\Facades\Notification::class,
        'Password' => Illuminate\Support\Facades\Password::class,
        'Queue' => Illuminate\Support\Facades\Queue::class,
        'Redirect' => Illuminate\Support\Facades\Redirect::class,
        'Redis' => Illuminate\Support\Facades\Redis::class,
        'Request' => Illuminate\Support\Facades\Request::class,
        'Response' => Illuminate\Support\Facades\Response::class,
        'Route' => Illuminate\Support\Facades\Route::class,
        'Schema' => Illuminate\Support\Facades\Schema::class,
        'Session' => Illuminate\Support\Facades\Session::class,
        'Storage' => Illuminate\Support\Facades\Storage::class,
        'Str' => Illuminate\Support\Str::class,
        'URL' => Illuminate\Support\Facades\URL::class,
        'Validator' => Illuminate\Support\Facades\Validator::class,
        'View' => Illuminate\Support\Facades\View::class,
        'Auth0' => Auth0\Login\Facade\Auth0::class,

    ],

];

api.php

//Protected routes
Route::middleware('auth:api')->group(function(){
    Route::get('/user', 'AuthController@getDetails');
    Route::post('logout', 'AuthController@logout')->name('logout');
});

当我登录时,它会返回

{"JSON":{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIyIiwianRpIjoiOGVjNDU4MDNkMTc4MzJmMjkxNTIzMWEwY2FmMzNiYjU2ODA3OTljYzBiNGU1NGI4Y2NiNDEyMTQ0MzIxOTcwYjhiNzhiNWE3NmQwMDY3MTAiLCJpYXQiOjE1ODczMDIxMTQsIm5iZiI6MTU4NzMwMjExNCwiZXhwIjoxNTg3MzAyNDEyLCJzdWIiOiIzIiwic2NvcGVzIjpbIioiXX0.Lyr1pW8ec4XO-TXxv7Pqc06gLUOGJmaVRcr7lQDCzaaknWVyr-C8zQd67GyYBrLKpduvZQ-1nCUGpJNqQ54p3IXbTG1UXrFy1ytFXcnpl6ZNxCMoENcbzg_skRLr7Mf1yRI5A0QEqx0NBGrmcBhcd2R7QOUsdYQZiIT9xhHgSOlN2IEmrQRdRSJ3SSeNcecf5zn_EpznkzbQP9viUkZ-cOg5DyX_4LkrCS1xY52cVhzhlp2jZS0hnSXYX_SetBAzg_Q_Hq_v7b6b3SXsFQfyVp96moJKK1w3ukk-DKWxM75c9zjbRL-zeAqaKUMF9duzSEUfr4inIazADRdax9mn371EtW4wKLVWSJFLXCqD6bc6h2cc42v_Suoz__R5Vp8vWNNx8EdFhnXwhhUb-Ks2k_8dqNHccp40gPznQVxNQjluLVfP8_7qJUv8oSjy1E1Xl2T9L4BCTq8LHWEglDbWjX3v72BFvaMBT8nLZUNaGj-DAvqtriOuzRmGrbULz-WE1Ng_Bb6IyTwD-V3wSzzqapYLTj9r2O36mUmJB6zcDQgy7KKo54Po3OBY4oZwDkbhFmii1_eBtOGzkoTc0NRHYwzJe7cR8iB0D5wBI9kWmuSehyTTN4JoYecfF_wDrzSdBKLhg7lW421-XHsCHxRddaqkaiG-l3yPH98ZJaEVoxE","expiresIn":298,"message":"Login successful"},"Response Payload":{"EDITOR_CONFIG":{"text":"{\"token\":\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIyIiwianRpIjoiOGVjNDU4MDNkMTc4MzJmMjkxNTIzMWEwY2FmMzNiYjU2ODA3OTljYzBiNGU1NGI4Y2NiNDEyMTQ0MzIxOTcwYjhiNzhiNWE3NmQwMDY3MTAiLCJpYXQiOjE1ODczMDIxMTQsIm5iZiI6MTU4NzMwMjExNCwiZXhwIjoxNTg3MzAyNDEyLCJzdWIiOiIzIiwic2NvcGVzIjpbIioiXX0.Lyr1pW8ec4XO-TXxv7Pqc06gLUOGJmaVRcr7lQDCzaaknWVyr-C8zQd67GyYBrLKpduvZQ-1nCUGpJNqQ54p3IXbTG1UXrFy1ytFXcnpl6ZNxCMoENcbzg_skRLr7Mf1yRI5A0QEqx0NBGrmcBhcd2R7QOUsdYQZiIT9xhHgSOlN2IEmrQRdRSJ3SSeNcecf5zn_EpznkzbQP9viUkZ-cOg5DyX_4LkrCS1xY52cVhzhlp2jZS0hnSXYX_SetBAzg_Q_Hq_v7b6b3SXsFQfyVp96moJKK1w3ukk-DKWxM75c9zjbRL-zeAqaKUMF9duzSEUfr4inIazADRdax9mn371EtW4wKLVWSJFLXCqD6bc6h2cc42v_Suoz__R5Vp8vWNNx8EdFhnXwhhUb-Ks2k_8dqNHccp40gPznQVxNQjluLVfP8_7qJUv8oSjy1E1Xl2T9L4BCTq8LHWEglDbWjX3v72BFvaMBT8nLZUNaGj-DAvqtriOuzRmGrbULz-WE1Ng_Bb6IyTwD-V3wSzzqapYLTj9r2O36mUmJB6zcDQgy7KKo54Po3OBY4oZwDkbhFmii1_eBtOGzkoTc0NRHYwzJe7cR8iB0D5wBI9kWmuSehyTTN4JoYecfF_wDrzSdBKLhg7lW421-XHsCHxRddaqkaiG-l3yPH98ZJaEVoxE\",\"expiresIn\":298,\"message\":\"Login successful\"}","mode":"application/json"}}}

这是我的dashboardComponent.vue,我试图在其中检索当前登录的用户

methods: {
            async fetchData () {
                const tk = this.isLoggedIn;
                this.error = this.post = null
                this.loading = true
                let authOptions = {
                    method: 'GET',
                    url: '/user',
                    data: [],
                    headers: {
                        'Accept': 'application/json',
                        'Content-Type': 'application/json',
                        'Authorization': `Bearer ${tk}`
                    },
                    json: true
                };
                console.log(authOptions);
                //return false;
                await this.$axios(authOptions).then(response => {
                        console.log(response);
                        //this.$store.commit('setCurrentUser', user.user)
                    })
            },
        }

上面组件中的console.log返回此

{…}
​
data: Array []
​
headers: Object { Accept: "application/json", "Content-Type": "application/json", Authorization: "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIyIiwianRpIjoiOGVjNDU4MDNkMTc4MzJmMjkxNTIzMWEwY2FmMzNiYjU2ODA3OTljYzBiNGU1NGI4Y2NiNDEyMTQ0MzIxOTcwYjhiNzhiNWE3NmQwMDY3MTAiLCJpYXQiOjE1ODczMDIxMTQsIm5iZiI6MTU4NzMwMjExNCwiZXhwIjoxNTg3MzAyNDEyLCJzdWIiOiIzIiwic2NvcGVzIjpbIioiXX0.Lyr1pW8ec4XO-TXxv7Pqc06gLUOGJmaVRcr7lQDCzaaknWVyr-C8zQd67GyYBrLKpduvZQ-1nCUGpJNqQ54p3IXbTG1UXrFy1ytFXcnpl6ZNxCMoENcbzg_skRLr7Mf1yRI5A0QEqx0NBGrmcBhcd2R7QOUsdYQZiIT9xhHgSOlN2IEmrQRdRSJ3SSeNcecf5zn_EpznkzbQP9viUkZ-cOg5DyX_4LkrCS1xY52cVhzhlp2jZS0hnSXYX_SetBAzg_Q_Hq_v7b6b3SXsFQfyVp96moJKK1w3ukk-DKWxM75c9zjbRL-zeAqaKUMF9duzSEUfr4inIazADRdax9mn371EtW4wKLVWSJFLXCqD6bc6h2cc42v_Suoz__R5Vp8vWNNx8EdFhnXwhhUb-Ks2k_8dqNHccp40gPznQVxNQjluLVfP8_7qJUv8oSjy1E1Xl2T9L4BCTq8LHWEglDbWjX3v72BFvaMBT8nLZUNaGj-DAvqtriOuzRmGrbULz-WE1Ng_Bb6IyTwD-V3wSzzqapYLTj9r2O36mUmJB6zcDQgy7KKo54Po3OBY4oZwDkbhFmii1_eBtOGzkoTc0NRHYwzJe7cR8iB0D5wBI9kWmuSehyTTN4JoYecfF_wDrzSdBKLhg7lW421-XHsCHxRddaqkaiG-l3yPH98ZJaEVoxE" }
​
json: true
​
method: "GET"
​
url: "/user"
​

0 个答案:

没有答案
相关问题