0

我正在尝试通过 Jetstream 身份验证控制器本身附加一个角色并更新表中的registered_at字段,该invitations控制器位于App\Actions\Fortify\CreateNewUser. 我想在用户创建帐户时执行上述功能。

下面的代码正在执行我想要的功能,它成功地更新了registered_at字段,并附加了角色,但没有成功地重定向到仪表板。

错误

传递给 Illuminate\Auth\SessionGuard::login() 的参数 1 必须实现接口 Illuminate\Contracts\Auth\Authenticatable,给定 null,在 C:\xampp\htdocs\2020\vendor\laravel\fortify\src\Http\Controllers 中调用\RegisteredUserController.php 第 56 行

App\Actions\Fortify\CreateNewUser.php -更新代码

public function create(array $input) {
    Validator::make($input, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => $this - > passwordRules(),
    ]) - > validate();

    $user = User::create([
        'name' => $input['name'],
        'email' => $input['email'],
        'password' => Hash::make($input['password']),
    ]);

    $user - > roles() - > sync('3');
    $invitation = Invitation::where('email', $user - > email) - > firstOrFail();
    $invitation - > registered_at = $user - > created_at;
    $invitation - > save();
}

App\Actions\Fortify\CreateNewUser.php -原始代码

public function create(array $input) {
    Validator::make($input, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => $this - > passwordRules(),
    ]) - > validate();

    return User::create([
        'name' => $input['name'],
        'email' => $input['email'],
        'password' => Hash::make($input['password']),
    ]);
}
4

2 回答 2

1

您需要从方法中返回 $user

public function create(array $input) {
    Validator::make($input, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => $this - > passwordRules(),
    ]) - > validate();

    $user = User::create([
        'name' => $input['name'],
        'email' => $input['email'],
        'password' => Hash::make($input['password']),
    ]);

    $user - > roles() - > sync('3');
    $invitation = Invitation::where('email', $user - > email) - > firstOrFail();
    $invitation - > registered_at = $user - > created_at;
    $invitation - > save();

    return $user;
}
于 2020-12-04T04:45:43.573 回答
0

在原始代码中,返回了一个用户。在我的版本中没有返回语句。JetStream/Fortify 期望从该方法返回一个用户实例。

最后只好加上这个。

return $user;
于 2020-12-04T04:45:16.677 回答