是否可以使用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'));
}
答案 0 :(得分:14)
您可以获取已记录的用户数据。
$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;
答案 1 :(得分:14)
您不需要Auth::user();
您可以使用toUser
的{{1}}方法。只需将令牌作为参数传递,您将获得用户信息:
JWTAuth
有关详细信息,请使用toUser方法:
$user = JWTAuth::toUser($token);
return response()->json(compact('token', 'user'));
答案 2 :(得分:3)
您还可以使用| | 101 | 132 | 160 | 165 | 200 | 285 | 334 | 1123 | 1601 | 1617 | 1991 | 7075 |
|---|-----|-----|-----|-----|-----|-----|-----|------|------|------|------|------|
| a | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| b | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
| c | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
方法。
在JWTAuth::user()
方法中返回user()
方法调用,该方法本身是toUser()
方法的别名,该方法通过令牌对用户进行身份验证。如果用户已经通过身份验证,则无需再次对其进行身份验证(authenticate()
可以这样做),而可以使用toUser()
方法来获取经过身份验证的用户。
user()
答案 3 :(得分:1)
只需要返回指定的路由中间件内部 您定义的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';
}
});
});
答案 4 :(得分:1)
对我来说很好(laravel 5.7) 您必须将令牌发布给我函数并返回用户 使用Tymon \ JWTAuth \ Facades \ JWTAuth;
elapsed time2000061
elapsed timeelapsed time2000103
elapsed timeelapsed time20000222000061
elapsed time2000050
2000072
elapsed time2000061
elapsed time200012
答案 5 :(得分:0)
尝试一下(与laravel 5.6,5.7兼容):
use Tymon\JWTAuth\Facades\JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
// code to generate token for user with email testuser@gmail.com
$user=User::where('email','=','testuser@gmail.com')->first();
if (!$userToken=JWTAuth::fromUser($user)) {
return response()->json(['error' => 'invalid_credentials'], 401);
}
return response()->json(compact('userToken'));
答案 6 :(得分:0)
您可以使用来获取与令牌相关的当前用户:
$user = JWTAuth::setToken($token)->toUser();
答案 7 :(得分:0)
在Laravel 7.2中,如果上述任何一项都不能像这样使用来检索用户:
$credentials = request(['email', 'password']);
if (! $token = auth('api')->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
$user = auth('api')->user();
dd($user);
答案 8 :(得分:0)
解决方案谁都在努力验证用户和令牌然后保护
我面临的问题
即使我放置了当前令牌,Jwt 也不会返回任何用户
返回空
$user = JWTAuth::user(); //getting null
返回错误
$user = JWTAuth::parseToken()->authenticate();
返回错误
auth()->user()
检查的解决方案 在使用解决方案中间件之前,你的路由保护很重要,所以请记住
保护设置 config/auth.php
'guards' => [
'website_admin' => [
'driver' => 'jwt',
'provider' => 'website_admin',
],
]
供应商
'providers' => [
'super_admin' => [
'driver' => 'eloquent',
'model' => App\Website_super_admin_auth::class,
],
]
中间件(必须)
<?php
namespace App\Http\Middleware;
use Closure;
use JWTAuth;
use Exception;
use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
class JwtMiddleware extends BaseMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
try {
$user = JWTAuth::parseToken()->authenticate();
} catch (Exception $e) {
if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException){
return response()->json(['status' => 'Token is Invalid']);
}else if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException){
return response()->json(['status' => 'Token is Expired']);
}else{
return response()->json(['status' => 'Authorization Token not found']);
}
}
return $next($request);
}
}
Route(应该指定带有guard的中间件)
Route::group(['prefix' => 'super_ad', 'middleware' => ['jwt.verify','auth:super_admin']], function()
{
Route::get('/test', function (){
// $user = JWTAuth::parseToken()->authenticate(); <-------check user here
$user=auth()->user();
// return $user;
});
})
答案 9 :(得分:-1)
public function user(Request $request){
/// get user details from token
$user = JWTAuth::toUser($this->bearerToken($request));
// get payloads in the token
$payload = JWTAuth::getPayload($this->bearerToken($request));
}
public function bearerToken($request)
{
$header = $request->header('Authorization', '');
if (Str::startsWith($header, 'Bearer ')) {
return Str::substr($header, 7);
}
}