Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

403
Views
Error 401 no autorizado en pasaporte laravel 6

Estoy tratando de usar el pasaporte laravel para autenticar a los usuarios. Seguí cada paso en la documentación del pasaporte de laravel. Pero muestra un error cuando accedo a una ruta que está protegida por el middleware 'auth: api'. He buscado en Internet, pero ninguna de las respuestas funciona hasta ahora. Consulte el código y lo que he intentado hasta ahora a continuación.

Tecnología utilizada

  • Laravel 6
  • Pasaporte Laravel
  • vista 2
  • Axios

Probado hasta ahora:

  • Passport::routes(); a Passport::routes(null, ['prefix' => 'api/oauth', 'middleware' => ['auth:api', 'web', 'auth']]); en AuthServiceProvider . También probé Passport::routes(null, ['prefix' => 'api/oauth');
  • Intenté ejecutar el php artisan cache:clear

rutas/api.php

 Route::middleware('auth:api')->group(function() { Route::get('user', function() { return request()->user(); }); Route::get('posts', 'PostController@index')->name('posts'); Route::post('posts/store', 'PostController@store')->name('posts.store'); Route::get('posts/{id}/show')->name('posts.show'); Route::get('users/{id}/show')->name('users.show'); });

Axios

 mounted() { axios.get('/api/posts') .then(res => this.posts = res.data).catch(error => console.log('Unable to fetch posts.')) }

Error

Encabezados:

ingrese la descripción de la imagen aquí

Avíseme si necesita algunos detalles que aún no están indicados en mi publicación.

Configuración

  1. Ejecute composer require laravel/passport:9 para la instalación.
  2. Ejecute la php artisan migrate para las tablas.
  3. Ejecute el php artisan passport:install para generar las claves de cifrado.
  4. Se agregó el rasgo Laravel\Passport\HasApiTokens en el modelo de User .
  5. Passport::routes(); en AuthServiceProvider .
  6. Se cambió el controlador api de guard a passport en config/auth.php .

Código fuente completo:

Haga clic en este enlace

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Creo que deberías revisar tu código con los siguientes pasos.

Paso 1 : el modelo de User debe usar HasApiTokens

 ... class User extends Authenticatable { use HasApiTokens, Notifiable; }

Paso 2 : Método Passport::routes dentro del método de arranque de su AuthServiceProvider

 class AuthServiceProvider extends ServiceProvider { ... public function boot() { $this->registerPolicies(); Passport::routes(); } }

Paso 3 : en su archivo de configuración config/auth.php , debe establecer la opción de controlador de la protección de autenticación de API en pasaporte

 'guards' => [ 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],

Paso 4 (opcional): si desea consumir su API desde su aplicación de JavaScript, debe enviar manualmente un token de acceso a la aplicación y pasarlo con cada solicitud a su aplicación. Sin embargo, Passport incluye un middleware que puede manejar esto por usted. Todo lo que necesita hacer es agregar el middleware CreateFreshApiToken a su grupo de middleware web en su archivo app/Http/Kernel.php :

 'web' => [ // Other middleware... \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class, ],

! Debe asegurarse de que el middleware CreateFreshApiToken sea el último middleware enumerado en su pila de middleware.

Editar (2021/10/17):
Debe intentar agregar el middleware de autenticación a $middlewareGroups de su Kernel.php

 protected $middlewareGroups = [ ... 'api' => [ 'throttle:60,1', \Illuminate\Routing\Middleware\SubstituteBindings::class, 'auth:api', //Need to add ], ];

Editar (2021/10/25):
Descargué tu código y lo depuré. Cuando lo depure, obtendrá el siguiente resultado:

ingrese la descripción de la imagen aquí

El encabezado JWT no es válido para la estructura JSON. Parece que hay una incompatibilidad entre la biblioteca de Laravel Passport y su sistema. Debe verificar la versión de su sistema (PHP, Laravel, etc.). Seguiré investigando. Si tienes alguna información nueva, por favor házmelo saber.

Editar (2021/11/02):

Actualice su dependencia de laravel/framework a ^6.0 en su archivo composer.json. Si está instalado, actualice su dependencia de laravel/passport a ^9.3.2 en su archivo composer.json.

https://laravel.com/docs/6.x/upgrade#updating-dependencies

Según la documentación de Laravel 6.x , la versión de Laravel Passport es de 9.3.2. Por favor, pruebe esta versión.

over 4 years ago · Santiago Trujillo Report

0

Si está utilizando el prefijo Api/oauth Y agrega el middleware auth:api de lo que necesita para autenticarse a través de tokens Bearer.

Por lo tanto, es posible que tenga un problema relacionado con el token csrf, así que intente deshabilitarlo a continuación.

 Passport::ignoreCsrfToken(true);
over 4 years ago · Santiago Trujillo Report

0

Debe agregar token bearer en sus solicitudes de ajax. Puede obtenerlo después de un inicio de sesión exitoso.

 // laravel use Illuminate\Support\Facades\Auth; use App\Models\User; public function login() { $credentials = request(['email', 'password']); $user = User::where('email', $credentials['email'])->first(); if (!$user || !$token = Auth::attempt($credentials)) { return response()->json(['success'=> false, 'error' => 'неверный логин или пароль', 'cr' => $credentials], 422); } return $this->respondWithToken($token); }

 // vue login async function login(email, password) { try { const response = await axios.post('/auth/login', {email, password}); const token = response.data.token; // some func to store token, I am using vuex mutations for this storeToken(token); } catch(error) { console.error(error); } }; // vue regular function async function changePassword(newPassword) { // get token from global storage, with vuex it will be like store.state.auth.token const token = getToken(); await axios.post('/user/changePassword', {newPassword}, headers: { Authorization: `Bearer ${token}`}); }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!