如何在Laravel中将用户会话与管理会话分离?
拉拉维尔的“多个八月”能做到这一点吗?
有没有另一种方法可以不使用多个Auth来分离会话?我不想使用Multi,因为它看起来很复杂。
但我想知道会议是否可以与多个8月分开?下面的代码如何?
// in a user page
$request->session()->put('name', 1);
// in an admin page
var_dump($request->session()->get('name'));
输出结果是什么?1还是空?
通常,将用户会话与管理会话分离是web应用程序中的常见做法?
或者,您应该通过在会话密钥中添加前缀来将用户会话与管理会话分开,就像这样?
// in php
$_SESSION['user']['name'] = 1;
$_SESSION['admin']['name'] = 2;
unset($_SESSION['admin']);
// in Laravel
$request->session()->put('user.name', 1);
$request->session()->put('admin.name', 2);
$request->session()->forget('admin');
在Laravel的config/sessions.php中,我找不到将用户会话与管理会话分开的选项。会话配置文件似乎只提供了一个会话配置。
发布于 2021-12-21 06:09:20
假设你只是想为管理员保护一些视图。
这里是一个基本的例子,如何做一个“管理”,想出任何你想要的解决方案。如果您愿意,可以在您的用户表上创建一个额外的列。
首先,在用户模型上创建一个名为isAdmin的方法
private const ADMIN_IDS = [
1,2,3,4
];
public function isAdmin()
{
return in_array($this->id, self::ADMIN_IDS);
}
然后创建一个中间件https://laravel.com/docs/8.x/middleware#defining-middleware
<?php
namespace App\Http\Middleware;
use Closure;
class AdminMiddleware
{
public function handle($request, Closure $next)
{
if (auth()->user()->isAdmin()) {
return $next($request);
}
abort(401);
}
}
在App\Http\Kernel类中添加我们刚才创建的“admin”中间件(参见第二行)
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
Route::get('/admin', function () {
//
})->middleware(['auth', 'admin']);
https://stackoverflow.com/questions/70430382
复制相似问题