Vin*_*nce 6 authentication constructor laravel
我可以像这样获取经过身份验证的用户的 ID:
Auth::user()->id = $id;
Run Code Online (Sandbox Code Playgroud)
太好了,它有效,......但我有很多方法需要它,我想要一种更简洁的方式将它作为一个整体添加到类中,所以我可以在每个方法中引用 $id 。我正在考虑将它放入构造函数中,但由于 Auth::user 是静态的,我把事情弄得一团糟,不知道该怎么做。
非常感谢您的帮助 !
Laravel >= 5.3
您无法在控制器的构造函数中访问会话或经过身份验证的用户,因为中间件尚未运行。
作为替代方案,您可以直接在控制器的构造函数中定义基于闭包的中间件。在使用此功能之前,请确保您的应用程序正在运行 Laravel5.3.4或更高版本:
class UserController extends Controller {
protected $userId;
public function __construct() {
$this->middleware(function (Request $request, $next) {
if (!\Auth::check()) {
return redirect('/login');
}
$this->userId = \Auth::id(); // you can access user id here
return $next($request);
});
}
}
Run Code Online (Sandbox Code Playgroud)
小智 2
您可以在整个应用程序中使用 Auth::user()。你在哪里并不重要。但是,为了回答您的问题,您可以使用控制器文件夹中存在的“控制器”类。在那里添加一个构造函数并引用用户 ID。
<?php namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesCommands;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
/* Don't forget to add the reference to Auth */
use Auth;
abstract class Controller extends BaseController {
use DispatchesCommands, ValidatesRequests;
function __construct() {
$this->userID = Auth::user()?Auth::user()->id:null;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在任何控制器的任何方法中,您都可以使用 $this->userID 变量。