【问题标题】:Argument 1 passed to Laravel 6参数 1 传递给 Laravel 6
【发布时间】:2020-03-24 13:48:56
【问题描述】:

我想用邀请码在我的网站上注册,所以我在控制器中添加了 If 语句以检查激活码

 protected function create (array $data)
    {
        if ($data['activation_code'] === 'mypassword123') {
            return User::create([
                'name' => $data['name'],
                'lastname' => $data['lastname'],
                'email' => $data['email'],
                'password' => Hash::make($data['password']),
            ]);
        }
            return redirect('/register')->with('message', 'De activatiecode is onjuist');
        }

}

当我提交注册时出现此错误

传递给 Illuminate\Auth\SessionGuard::login() 的参数 1 必须是 Illuminate\Contracts\Auth\Authenticatable 的实例,给出的 Illuminate\Http\RedirectResponse 的实例,在 C:\xampp\htdocs 中调用\Suppliers\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php 第 35 行

所以我不知道问题出在哪里,请帮忙

【问题讨论】:

  • 您返回的是 User::create() 的结果,即 User 对象。您需要返回要呈现的元素或重定向页面。
  • 您正在返回响应。但是 laravel 希望你返回一个扩展 Authenticable(用户)的模型。可以看看方法上面的cmets吗?
  • @Ezrab_ 你说得对,谢谢!

标签: laravel forms controller


【解决方案1】:

就像评论说protected function create (array $data)不负责重定向到不同的页面,我认为逻辑也不应该在那里。

您可以从trait RegistersUsers 覆盖register 方法或创建一个中间件。

  1. 覆盖register 方法,在RegisterController 在此处添加逻辑。
    /**
     * Handle a registration request for the application.
     *
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        if ('mypassword123' !== $request->input('activation_code')) {
            return redirect('/register')->with('message', 'De activatiecode is onjuist');
        }

        $this->validator($request->all())->validate();

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

        $this->guard()->login($user);

        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }
  1. 中间件
<?php

namespace App\Http\Middleware;

use Closure;

class CheckCode
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     *
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ('mypassword123' !== $request->input('activation_code')) {
            return redirect('/register')->with('message', 'De activatiecode is onjuist');
        }

        return $next($request);
    }
}

然后在你需要的时候添加它。

use App\Http\Middleware\CheckAge;

Route::get('someroutes', function () {
    //some code
})->middleware(CheckCode::class);

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2021-10-08
    • 2015-10-09
    • 2020-03-22
    相关资源
    最近更新 更多