![](/img/trans.png)
[英]How to get auth user in Laravel controller when using the Laravel passport for API?
[英]is it possible to get the user in api without using passport using laravel default auth
我有一个单片应用程序。 现在我想在我的应用程序中获取经过身份验证的user
,就像 2 apis
一样。 我知道我可以使用 laravel passport
来生成令牌并获取user
,但我想知道是否也可以在 api 的网站上获取经过身份验证的user
。 现在在我的api
controller 中,当我dd()
以下选项时,我得到 null:
dd(auth()->user());
dd(auth('api')->user());
dd(Auth::user());
我正在使用 laravel fortify
进行用户登录。
我有同样的问题。 所以我创建了中间件,如果 Bearer 令牌存在,你可以使用 Auth::user 获取用户,如果没有 Bearer Token,应用程序在没有身份验证的情况下仍然可以工作。 下面的中间件与 Auth & Unauth 一起工作。
<?php
namespace App\Http\Middleware;
use App\Models\User;
use Carbon\Carbon;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Lcobucci\JWT\Configuration;
class CheckUserAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next){
$value = $request->bearerToken(); // Get auth token
if(!$value) { // Stop auth if token not sent
return $next($request);
}
$parser = Configuration::forUnsecuredSigner()->parser();//new \Lcobucci\JWT\Token\Parser();
$token = $parser->parse($value); // Parse token
if($token->isExpired(Carbon::now())) { // Check token is expired
return $next($request);
}
if(@ !$id = $token->claims()->all()['jti']) {// Get user ID
return $next($request);
}
$data = DB::table('oauth_access_tokens') // Check id is valid
->select('user_id')
->where('id', $id)
->first();
if($data) { // If oauth_access_tokens record is exists
$user = User::find($data->user_id); // Load user object model
if($user) { // check if user found
if($user->active) { // Check user is available
Auth::setUser($user); // Set user in Auth object for getting in controllers
}
}
}
return $next($request);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.