【发布时间】:2019-02-22 03:49:45
【问题描述】:
我想在我的 laravel 项目中创建一个中间件来检查什么类型的用户登录到我的网站。这个想法是我检查用户是否在中间件中登录,然后将会话变量设置为某个值。
这是中间件:
CheckIfLoggedin.php
use Closure;
use Auth;
class CheckIfLoggedin
{
public function handle($request, Closure $next)
{
if (Auth::check()) {
$request->session()->put('loggedin', 'admin');
}
return $next($request);
}
}
我已按照文档中的说明将其注册为全局中间件,方法是将此行添加到 Kernel.php:
protected $middleware = [
// ...
\App\Http\Middleware\CheckIfLoggedin::class,
];
然后我在刀片模板中检查此会话变量的值,如下所示:
@if(session('loggedin'))
<!-- some html code -->
@endif
我知道我也可以用这个来验证登录:
@auth
<!-- some html code -->
@endauth
但是使用这个会话变量的原因是我会有不同类型的成员(如member 或admin),我稍后会将登录类型分配给该会话变量,然后它应该可以工作像这样在刀片模板中:
@if(session('loggedin')=='member')
<!-- some html code that only members can see -->
@elseif(session('loggedin')=='admin')
<!-- some html code that only admins can see -->
@endif
关于为什么这个中间件不能像我预期的那样工作有什么想法吗?请注意,虽然我对 Laravel 还很陌生...
谢谢!
【问题讨论】:
标签: php laravel middleware laravel-blade