首页 > 解决方案 > 具有不同用户表的 Laravel 多重身份验证

问题描述

我正在尝试在 laravel 中为管理员和用户使用不同的表(2 个表)构建多重身份验证。问题是注册和登录表单仅适用于默认身份验证登录/注册。

我已经尝试了一些网络教程中的示例,但没有奏效。

HomeController.php:

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

public function index() {
    return view('home');
}

我在“Auth/RegisterController.php”中添加了 createAdmin 函数:

protected function createAdmin(array $data)
{
    $this->validator($data->all())->validate();
    $admin = Admin::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
    return redirect()->intended('login/admin');
}

我已将电子邮件验证规则更改为:

'email' => ['required', 'string', 'email', 'max:255', 'unique:users'|'unique:admins']

路线(web.php)是:

Route::post('/register/admin', 'Auth\RegisterController@createAdmin');

当我填写管理员注册凭据并单击注册按钮时,我收到以下消息:

Symfony\Component\Debug\Exception\FatalThrowableError 函数 App\Http\Controllers\Auth\RegisterController::createAdmin() 的参数太少,通过了 0,预期正好 1

标签: laravel

解决方案


错误来自控制器方法array $data中的参数。createAdmin()

通常,您希望在控制器方法中使用两种类型的参数之一:路由参数注入依赖项。该$data参数与其中任何一个都不匹配,因此 Laravel 不知道提供它。

如果您想访问控制器中的请求(POST)数据,您可以请求一个实例Illuminate\Http\Request作为参数:

// Import it at the top of your PHP file
use Illuminate\Http\Request;

// Then your updated method:
public function createAdmin(Request $request)
{
    $data = $request->all();

    // ...
}

或者,直接使用request()帮助器:

public function createAdmin()
{
    $data = request()->all();

    // ...
}

推荐阅读