在 Laravel 中,获取当前认证用户的详细信息是一个常见的需求,无论是在 Web 路由还是 API 路由中。Laravel 提供了多种方式来访问当前登录用户的信息。
Auth
Facadeuse Illuminate\Support\Facades\Auth;
// 获取当前认证用户
$user = Auth::user();
// 获取用户ID
$userId = Auth::id();
// 检查用户是否已认证
if (Auth::check()) {
// 用户已登录
}
auth()
辅助函数// 获取当前认证用户
$user = auth()->user();
// 获取用户ID
$userId = auth()->id();
// 检查用户是否已认证
if (auth()->check()) {
// 用户已登录
}
在控制器方法中,可以通过类型提示 Illuminate\Http\Request
来获取用户:
public function show(Request $request)
{
$user = $request->user();
// 使用 $user...
}
Web 路由默认使用 session 驱动进行认证,用户信息存储在 session 中。
Route::get('/profile', function () {
// 只有认证用户才能访问
$user = auth()->user();
return view('profile', ['user' => $user]);
})->middleware('auth');
API 路由通常使用 token 驱动(如 Passport 或 Sanctum)进行认证:
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
原因:
解决方案:
解决方案: 可以创建一个辅助类或 trait 来统一获取用户的方式:
trait GetsUser
{
protected function getUser()
{
return auth()->user() ?? auth('api')->user();
}
}
然后在控制器中使用:
class UserController extends Controller
{
use GetsUser;
public function show()
{
$user = $this->getUser();
// ...
}
}
解决方案: 使用 Eloquent 的关系加载:
$user = auth()->user()->load('posts', 'comments');
// 或者
$user = auth()->user()->with('posts', 'comments')->first();
if ($user = auth()->user()) {
// 安全地使用 $user
}
Route::middleware(['auth:web,api'])->group(function () {
// 同时保护 Web 和 API 路由
});
// 创建资源
php artisan make:resource UserResource
// 在控制器中使用
public function show()
{
return new UserResource(auth()->user());
}
通过以上方法,您可以灵活地在 Laravel 的 Web 和 API 路由中获取用户详细信息,并根据不同场景进行适当的处理。
没有搜到相关的文章