【问题标题】:Laravel: Multiple auth with same routesLaravel:具有相同路由的多个身份验证
【发布时间】:2020-01-16 16:15:23
【问题描述】:

我有一个 Laravel(5.8) 应用程序,其中有两个角色 Super AdminAdmin,它们保存在两个不同的表 adminsusers 中。他们每个人都有自己的访问级别。但是,整个应用程序中大约 95% 的路由对于每个路由都是相同的,但会根据其访问级别进行限制或修改。

例如:
Admin只能更新自己的个人资料,拥有创建和查看权限。
Super Admin可以玩admins的列表,拥有创建/更新权限/查看和删除。

因此我有两个警卫users(default) = users tableadmins = admins table。但是,当我在同一个控制器中添加两者或警卫时,它只会继续重定向并显示the page is not redirecting properly

config/auth.php

'guards' => [
    'web' => [
        'driver'   => 'session',
        'provider' => 'users',
    ],

    'member' => [
        'driver'   => 'session',
        'provider' => 'member',
    ],
    ...
],
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model'  => App\User::class,
    ],

    'member' => [
        'driver' => 'eloquent',
        'model'  => App\Member::class,
    ],
],

用户.php

class User extends Authenticatable
{
    ...

    public function _login($request)
    {
        if(\Auth::attempt([
            'email'    => $request->email,
            'password' => $request->password
        ]))
        {
            return [
                'success' => true
            ];
        }
        else
        {
            return [
                'success' => false
            ];
        }
    }
}

会员.php

class Member extends Authenticatable
{
    ...

    public function _login($request)
    {
        if(\Auth::guard('member')->attempt([
            'email'    => $request->email,
            'password' => $request->password
        ]))
        {
            return [
                'success' => true
            ];
        }
        else
        {
            return [
                'success' => false
            ];
        }
    }
}

HomeController.php

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        echo "<pre>";

        if(\Auth::user())
        {
            print_r(\Auth::user());
        }
        else if(\Auth::guard('member')->user())
        {
            print_r(\Auth::guard('member')->user());
        }

        echo "</pre>";
    }
}

如果我在__construct() 中评论auth 中间件,那么它可以工作并显示登录用户的数据,但如果继续重定向并显示the page is not redirecting properly 错误。

【问题讨论】:

    标签: laravel authentication routes


    【解决方案1】:

    您可能想要使用$this-&gt;middleware('auth:web')$this-&gt;middleware('auth:member'),以便您的中间件知道要使用哪个保护。

    : 之后的任何内容都作为参数传递给中间件的 handle() 函数。

    【讨论】:

    • 谢谢@Flame,我会试试这个解决方案
    • 我尝试了您的解决方案,但没有奏效。我仍然收到the page is not redirecting properly 错误。
    • 您可能需要修改Authenticate 中间件,并根据您提供的守卫采取相应措施。在简洁的 stackoverflow 答案中解释得有点多。
    猜你喜欢
    • 2022-01-03
    • 2020-11-12
    • 1970-01-01
    • 2017-12-05
    • 2020-12-26
    • 2016-02-05
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多