【问题标题】:Set a specific middleware in laravel在 laravel 中设置特定的中间件
【发布时间】:2019-02-06 19:35:04
【问题描述】:

我正在开发一个 Laravel 应用程序,在这个应用程序中,每个用户都可以拥有多个角色,这个应用程序中有 12 个角色,一个用户一次可以拥有至少一个或多个角色,我想要的是当用户想要登录时,我想向他/她展示他/她可以登录的可用角色,并且他/她应该选择他/她的角色来登录,我为每个角色都有一个中间件,可以为他/她设置,问题是我无法在登录时为用户设置特定的中间件。
中间件之一:

<?php

namespace App\Http\Middleware;

use Closure;

class CTDMiddleware {

    public function handle($request, Closure $next) {
        if (Auth::check()) {
            $role = Auth::user()->user_role[0]->role->role;
            if (strtolower($role) == \App\Classes\User_Groups::$ctd) {
                return $next($request);
            }
        }
        return redirect()->route('/logout');
    }

}

这里我只是检查了用户的第一个角色,而她可能还有更多角色。 登录控制器:

    <?php

namespace App\Http\Controllers\Auth;

use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller {
use AuthenticatesUsers;

    protected $redirectTo = '/home';

    public function login(Request $request) {
        $validator = Validator::make(
                        array(
                    'email' => $request->email,
                    'password' => $request->password
                        ), array(
                    'email' => 'required | email',
                    'password' => 'required',
                        )
        );
        if ($validator->fails()) {
            return redirect('admin/login')->withErrors($validator)->withInput();
        } else {
            $adminInfo = array("email" => $request->email, "password" => $request->password); 
            if (auth()->attempt($adminInfo)) {
                return redirect('/home');
            } else {
                return redirect('/login')->with('errors', new \PhpParser\Error('Not Found', array('email', 'password')));
            }
        }
    }

    public function logout() {
        auth()->logout();
        return view('auth/login');
    }

}

但是我还没有实现角色选择选项,但是在登录控制器中我想为特定的中间件调用尝试()。

【问题讨论】:

    标签: laravel middleware laravel-middleware


    【解决方案1】:

    你可以像这样尝试使用特定的守卫:

    Auth::guard('admin')->attempt($adminInfo, $request->get('remember'))
    

    【讨论】:

    • 我已经尝试过,但它不起作用,它会将我重定向回登录页面
    • 我已经尝试过,但它不起作用,它会将我重定向回登录页面
    • 在使用特定的保护之前,你必须做一些配置,比如通过定义保护驱动程序和提供者来编辑 config/auth.php 你做了吗?
    • 在使用中间件之前,我尝试过使用守卫,守卫设置不正确,甚至没有注销,这是我在 auth.php 中的守卫和提供者:
    • 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' = > 'token', 'provider' => 'users', ], 'ctd' => [ 'driver' => 'session', 'provider' => 'ctds', ], 'pm' => [ 'driver ' => 'session', 'provider' => 'pms', ], 'prm' => [ 'driver' => 'session', 'provider' => 'prms', ], ],
    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2016-11-01
    • 2019-06-16
    • 2021-03-19
    • 2020-07-15
    • 2017-07-23
    • 1970-01-01
    相关资源
    最近更新 更多