web-dev-qa-db-fra.com

Laravel JWT Auth obtenir l'utilisateur sur la connexion

Est-il possible avec https://github.com/tymondesigns/jwt-auth .__ d'obtenir le current user? Parce que pour le moment, je ne peux générer qu'un jeton (lorsqu'un utilisateur se connecte). 

public function login(Request $request)
{
    $credentials = $request->only('email', 'password');

    try {
        if (! $token = JWTAuth::attempt($credentials)) {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
    } catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
        return response()->json(['error' => 'could_not_create_token'], 500);
    }

    return response()->json(compact('token'));
}
9
Jamie

Vous pouvez obtenir des données utilisateur enregistrées.

$credentials = $request->only('code', 'password', 'mobile');
try {
    // verify the credentials and create a token for the user
    if (! $token = JWTAuth::attempt($credentials)) {
        return response()->json(['error' => 'invalid_credentials'], 401);
    }
} catch (JWTException $e) {
    // something went wrong
    return response()->json(['error' => 'could_not_create_token'], 500);
}

$currentUser = Auth::user();
print_r($currentUser);exit;
12

Vous n'avez pas besoin de Auth::user();

Vous pouvez utiliser la méthode toUser de JWTAuth. Il suffit de passer le jeton en paramètre et vous récupérerez les informations de l'utilisateur

$user = JWTAuth::toUser($token);

return response()->json(compact('token', 'user'));

Pour plus d'informations, voici la méthode toUser:

/**
 * Find a user using the user identifier in the subject claim.
 *
 * @param bool|string $token
 *
 * @return mixed
 */

public function toUser($token = false)
{
    $payload = $this->getPayload($token);

    if (! $user = $this->user->getBy($this->identifier, $payload['sub'])) {
        return false;
    }

    return $user;
}
13
FrancescoMussi

Vous pouvez également utiliser la méthode JWTAuth::user().

L'appel de méthode user() est renvoyé dans la méthode toUser(), qui est elle-même un alias de la méthode authenticate() qui authentifie un utilisateur via un jeton. Si l'utilisateur est déjà authentifié, il n'est pas nécessaire de s'authentifier à nouveau (comme le fait toUser()), mais la méthode user() peut être utilisée pour obtenir l'utilisateur authentifié.

// $token = JWTAuth::attempt($credentials) was successful...

$user = JWTAuth::user();

return response()->json(compact('token', 'user'));
2
tomiplaz

Cela fonctionne très bien pour moi (laravel 5.7). utilisez Tymon\JWTAuth\Facades\JWTAuth;

public function me(Request $request)
{
    $user = JWTAuth::user();
    if (count((array)$user) > 0) {
        return response()->json(['status' => 'success', 'user' => $user]);
    } else {
        return response()->json(['status' => 'fail'], 401);
    }
}
1
Mammadli Anar

il suffit de revenir dans le middleware d’itinéraire spécifié L’itinéraire que vous avez défini api route

Route::group(['middleware' => 'jwt.auth'], function () {
    Route::post('/user', function (Request $request) {
        try {
            $user = \Illuminate\Support\Facades\Auth::user();
            return $user;
        } catch (\Tymon\JWTAuth\Exceptions\UserNotDefinedException $e) {
            return '$user';
        }
    });
});
1
Mehdi Rezazadeh

essayez ceci (cela fonctionne très bien avec laravel 5.6,5.7):

use Tymon\JWTAuth\Facades\JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;

// code to generate token for user with email [email protected]
$user=User::where('email','=','[email protected]')->first();

if (!$userToken=JWTAuth::fromUser($user)) {
   return response()->json(['error' => 'invalid_credentials'], 401);
}

return response()->json(compact('userToken'));
0
bharat