Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5-仅允许在验证后注册,并允许管理员注册_Php_Laravel_Laravel 5_Laravel Authorization - Fatal编程技术网

Php Laravel 5-仅允许在验证后注册,并允许管理员注册

Php Laravel 5-仅允许在验证后注册,并允许管理员注册,php,laravel,laravel-5,laravel-authorization,Php,Laravel,Laravel 5,Laravel Authorization,我正在尝试设置Laravel注册页面,使/register仅在以下情况下可用: 用户→ 已通过身份验证=TRUE 及 用户→ 类型=“员工”(存储在数据库中) 需要修改哪个文件,以便员工用户可以注册新的患者用户?在这种情况下,普通/患者用户的公共注册将被关闭。这是假设您正在使用内置身份验证,但在第一部分中,您希望将身份验证中间件添加到RegisterController的构造函数(app/Http/Controllers/auth)中 这就要求用户在注册前必须经过身份验证 第二部分。。。

我正在尝试设置Laravel注册页面,使/register仅在以下情况下可用:

  • 用户
    → <代码>已通过身份验证=
    TRUE

  • 用户
    → <代码>类型=“
    员工
    ”(存储在数据库中)

需要修改哪个文件,以便员工用户可以注册新的患者用户?在这种情况下,普通/患者用户的公共注册将被关闭。

这是假设您正在使用内置身份验证,但在第一部分中,您希望将身份验证中间件添加到RegisterController的构造函数(app/Http/Controllers/auth)中

这就要求用户在注册前必须经过身份验证

第二部分。。。这在很大程度上取决于你想如何控制事情,但我想说的最好的方法是看一看


我遵循这一点来设置我的,非常直接和更干净的方法来处理这个imo,修改随Laravel提供的auth文件

首先,在注册后禁用自动登录,以便登录的员工用户不会立即切换到新注册的患者用户。使用以下命令覆盖RegisterController(
app/Http/Controllers/Auth
)中的register():

public function register(Request $request)
{
    $this->validator($request->all())->validate();

    event(new Registered($user = $this->create($request->all())));

    return $this->registered($request, $user)
           ?: redirect($this->redirectPath());
}
您这样做是为了省去一行,
$this->guard()->login($user),位于原始注册表控制器寄存器()中

然后,您需要创建一个新的中间件来重定向用户,如果他们转到register视图,但不是staff。使用
php-artisan-make:middleware-IsStaff
app/Http/middleware
目录中创建一个新类:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class IsStaff
{

    public function handle($request, Closure $next)
    {   
        if (auth()->user()->type != 'Staff') {
            return redirect('home');
        }

        return $next($request);
    }

}
您需要在
app/Http/Kernel.php
中注册新的中间件:

protected $routeMiddleware = [
    'isStaff' => \App\Http\Middleware\IsStaff::class,
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
];
回到RegisterController中,使用内置的auth中间件和新的IsStaff中间件:

public function __construct()
    {
        $this->middleware(['auth', 'isStaff']);
    }
现在,非工作人员的来宾和用户将无法进行注册!我在自己的项目中实现了类似的功能,如果有问题,请告诉我。

欢迎使用堆栈溢出:-)请查看以及如何创建堆栈溢出。这将有助于得到有用的答案。
public function __construct()
    {
        $this->middleware(['auth', 'isStaff']);
    }