首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Laravel中将用户会话与管理会话分离?

如何在Laravel中将用户会话与管理会话分离?
EN

Stack Overflow用户
提问于 2021-12-21 03:35:43
回答 1查看 515关注 0票数 0

如何在Laravel中将用户会话与管理会话分离?

拉拉维尔的“多个八月”能做到这一点吗?

有没有另一种方法可以不使用多个Auth来分离会话?我不想使用Multi,因为它看起来很复杂。

但我想知道会议是否可以与多个8月分开?下面的代码如何?

代码语言:javascript
运行
复制
// in a user page
$request->session()->put('name', 1);

// in an admin page
var_dump($request->session()->get('name'));

输出结果是什么?1还是空?

通常,将用户会话与管理会话分离是web应用程序中的常见做法?

或者,您应该通过在会话密钥中添加前缀来将用户会话与管理会话分开,就像这样?

代码语言:javascript
运行
复制
// 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中,我找不到将用户会话与管理会话分开的选项。会话配置文件似乎只提供了一个会话配置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-21 06:09:20

假设你只是想为管理员保护一些视图。

这里是一个基本的例子,如何做一个“管理”,想出任何你想要的解决方案。如果您愿意,可以在您的用户表上创建一个额外的列。

首先,在用户模型上创建一个名为isAdmin的方法

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
<?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”中间件(参见第二行)

代码语言:javascript
运行
复制
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,
];
代码语言:javascript
运行
复制
Route::get('/admin', function () {
    //
})->middleware(['auth', 'admin']);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70430382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档