3

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

  • USERIS AUTHENTICATED=TRUE

  • USERTYPE=“ STAFF”(存储在数据库中)

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

4

2 回答 2

0

修改 Laravel 自带的 auth 文件...

对于初学者,请在注册后禁用自动登录,以便登录的员工用户不会立即切换到新注册的患者用户。在您的 RegisterController ( ) 中覆盖 register() app/Http/Controllers/Auth

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);即在原始的 RegisterController register() 中。

然后,如果用户进入注册视图但不是员工,您将需要创建一个新的中间件来重定向用户。用于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']);
    }

客人和非员工用户现在应该无法进行注册!我在自己的项目中实现了类似的东西,如果有什么问题请告诉我。

于 2019-08-27T08:15:26.520 回答
0

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

public function __construct()
{
    $this->middleware('auth');
}

这将要求在注册之前对用户进行身份验证

对于第二部分......这在很大程度上取决于你想如何控制事物,但我想说的最好方法是看看https://laracasts.com/series/whats-new-in-laravel-5- 1/集/13

我按照它来设置我的,非常直接和更清洁的方式来处理这个 imo

于 2017-02-12T17:00:18.910 回答