J'espère que quelqu'un pourra expliquer pourquoi je suis unauthenticated
alors que le processus d'authentification Oauth 2
a déjà été exécuté avec succès.
J'ai configuré le paquetage Passport
comme dans la documentation de Laravel et je me suis authentifié avec succès, j'ai reçu une valeur de jeton, etc. Mais, lorsque j'essaie de faire une demande get
sur, disons, /api/user
, je reçois une erreur Unauthenticated
en réponse. J'utilise la valeur du jeton comme en-tête avec le nom de clé Authorization
, comme décrit dans la documentation.
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware("auth:api");
Cette fonction est supposée me rendre en tant qu'utilisateur authentifié, mais je ne reçois que Unauthenticated
. De même, si je retourne simplement le premier utilisateur, je reçois à nouveau Unauthenticated
.
Route::get('/test', function(Request $request) {
return App\User::whereId(1)->first();
})->middleware("auth:api");
Dans un tutoriel de Laracast
, guidant la configuration de Passport
, le guide n'a pas a le ->middleware("auth:api")
dans ses itinéraires. Mais si ce n'est pas là, eh bien, il n'y a aucun besoin d'authentification!
S'il vous plaît, toutes les suggestions ou les réponses sont plus que bienvenues!
Vous devez définir une date d'expiration pour les jetons que vous générez,
dans votre AuthServiceProvider, définissez la méthode de démarrage sur quelque chose comme le code ci-dessous et essayez de générer un nouveau jeton. L'expiration par défaut des passeports renvoie un nombre négatif
public function boot()
{
$this->registerPolicies();
Passport::routes();
Passport::tokensExpireIn(Carbon::now()->addDays(15));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
Vérifiez votre modèle utilisateur et la table de base de données. Si vous avez modifié le nom du champ id principal pour indiquer autre chose que "id" ou même "id_utilisateur", vous pourriez rencontrer des problèmes. J'ai débogué un problème concernant la modification du champ id principal dans mon modèle utilisateur et ma table de base de données pour indiquer "acct_id" au lieu de le conserver comme "id" et le résultat était "Non authentifié". Lorsque j'ai tenté d'obtenir l'objet utilisateur via GET/user à travers l'auth: middleware api. Gardez à l'esprit que j'avais essayé tous les autres correctifs sous le soleil jusqu'à ce que je décide de le déboguer moi-même.
AUSSI Assurez-vous de mettre à jour votre passeport. Comme il a eu quelques changements apportés au cours des dernières semaines.
Je vais relier ma référence ci-dessous, elle est TRÈS détaillée et bien définie quant à ce que j'ai fait et comment j'ai abouti à la solution.
Prendre plaisir!
J'ai eu cette erreur à cause de cela j'ai supprimé les tables mysql de passeport (php artisan migrate:fresh
), php artisan passport:install
m'aide. N'oubliez pas qu'après avoir retiré les tables, vous devez réinstaller le passeport!
J'ai eu exactement la même erreur parce que j'ai oublié de mettre http avant le nom du projet.
use Illuminate\Http\Request;
Route::get('/', function () {
$query = http_build_query([
'client_id' => 3,
'redirect_uri' => 'http://consumer.dev/callback',
'response_type' => 'code',
'scope' => '',
]);
// The redirect URL should start with http://
return redirect('passport.dev/oauth/authorize?'.$query);
});
Route::get('/callback', function (Request $request) {
$http = new GuzzleHttp\Client;
$response = $http->post('http://passport.dev/oauth/token', [
'form_params' => [
'grant_type' => 'authorization_code',
'client_id' => 3,
'client_secret' => 'M8y4u77AFmHyYp4clJrYTWdkbua1ftPEUbciW8aq',
'redirect_uri' => 'http://consumer.dev/callback',
'code' => $request->code,
],
]);
return json_decode((string) $response->getBody(), true);
});