Authentication Laravel 5:如何添加Auth::user()->;通过构造函数的id?
我可以通过以下方式获取经过身份验证的用户的ID:Authentication Laravel 5:如何添加Auth::user()->;通过构造函数的id?,authentication,laravel,constructor,Authentication,Laravel,Constructor,我可以通过以下方式获取经过身份验证的用户的ID: Auth::user()->id = $id; 太好了,它工作了。。。但是我有一大堆需要它的方法,我想要一种更干净的方法将它作为一个整体添加到类中,这样我就可以在每个方法中引用$id了。我本来想把它放到构造函数中,但是由于Auth::user是静态的,所以我把事情弄得一团糟,不知道怎么做 非常感谢你的帮助 您可以在整个应用程序中使用Auth::user()。不管你在哪里。但是,为了回答您的问题,您可以使用controllers文件夹中的“
Auth::user()->id = $id;
太好了,它工作了。。。但是我有一大堆需要它的方法,我想要一种更干净的方法将它作为一个整体添加到类中,这样我就可以在每个方法中引用$id了。我本来想把它放到构造函数中,但是由于Auth::user是静态的,所以我把事情弄得一团糟,不知道怎么做
非常感谢你的帮助 您可以在整个应用程序中使用Auth::user()。不管你在哪里。但是,为了回答您的问题,您可以使用controllers文件夹中的“Controller”类。在那里添加构造函数并引用用户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;
}
}
您可以为身份验证类注入契约,然后在控制器上设置用户ID,而不是使用Facade。就像@rotvulpix展示的那样,您可以将其放在基本控制器上,以便所有子控制器也可以访问用户ID
<?php
namespace App\Http\Controllers;
use Illuminate\Contracts\Auth\Guard;
class FooController extends Controller
{
/**
* The authenticated user ID.
*
* @var int
*/
protected $userId;
/**
* Construct the controller.
*
* @param \Illuminate\Contracts\Auth\Guard $auth
* @return void
*/
public function __construct(Guard $auth)
{
$this->userId = $auth->id();
}
}
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);
});
}
}
是的,在这里阅读Laravel 5.3的升级文档:这里提到了这个问题,会话在构造函数中不再可用。