https://github.com/tymondesigns/jwt-auth を使用してcurrent user
を取得することは可能ですか?なぜなら、今は(ユーザーがサインインしたとき)トークンしか生成できないからです。
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'));
}
ログに記録されたユーザーデータを取得できます。
$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;
Auth::user();
は必要ありません
toUser
のJWTAuth
メソッドを使用できます。トークンをパラメーターとして渡すだけで、ユーザー情報が返されます。
$user = JWTAuth::toUser($token);
return response()->json(compact('token', 'user'));
詳細については、これは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;
}
JWTAuth::user()
メソッドを使用することもできます。
user()
メソッド呼び出しは、toUser()
メソッドで返されます。これは、トークンを介してユーザーを認証するauthenticate()
メソッドのエイリアスです。ユーザーがすでに認証されている場合は、再度認証する必要はありません(toUser()
が行う)。代わりに、user()
メソッドを使用して、認証されたユーザーを取得できます。
// $token = JWTAuth::attempt($credentials) was successful...
$user = JWTAuth::user();
return response()->json(compact('token', 'user'));
私には問題なく動作します(laravel 5.7)Uはトークンを私に投稿する必要があり、ユーザーは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);
}
}
これを試してください(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'));
指定されたルートのミドルウェア内に戻る必要があるだけAPIルートを定義したルート
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';
}
});
});