【问题标题】:Laravel 5.4 Error when create userLaravel 5.4 创建用户时出错
【发布时间】:2017-08-26 17:00:32
【问题描述】:

您好,我在创建用户时遇到了问题。我收到了这个错误: SessionGuard.php 第 407 行中的 FatalThrowableError:类型错误:传递给 Illuminate\Auth\SessionGuard::login() 的参数 1 必须实现接口 Illuminate\Contracts\Auth\Authenticatable,给定 null,在 /home/mariusz/Pulpit 中调用/www/szpital/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php 第 35 行

无论如何都创建了用户,但是这个错误太烦人了,我不知道如何修复它。 我使用 laravel auth 并且我很少编辑注册控制器,因为我需要为用户添加角色,现在我的控制器看起来像这样。

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Role;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Auth;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'lastname' => 'required|max:255',
            'phonenumber' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);
    }


    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * 
     */

     public function create(array $data)
    {
        $user = new User();
        $user->name = $data['name'];
        $user->lastname = $data['lastname'];
        $user->phonenumber = $data['phonenumber'];
        $user->email = $data['email'];
        $user->password = bcrypt($data['password']);
        $user->save();
        $user->roles()->attach(Role::where('name', 'User')->first());
        Auth::login($user);
        
        
    }
}
我不知道我不应该编辑它。当我收到此错误时,我想解释一下: 1.我去页面创建acc。 2.我写名字等。 3.当我点击创建时出现错误 4.接下来当我刷新页面用户创建时,登录并重定向到主页。

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    当使用 User::create 时

    return User::create([
            'name' => $data['name'],
            'username' => $data['username'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    

    默认返回 $user

    解决结束 return $user 结束

    $user = new User([
            'name' => $data['name'],
            'username' => $data['username'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
        $user->save();
    
        return $user;
    

    【讨论】:

      【解决方案2】:

      您不需要在 Laravel 5.4 中添加 Auth::login($user); 行以在注册后自动登录。替换:

      public function create(array $data)
      {
              $user = new User();
              $user->name = $data['name'];
              $user->lastname = $data['lastname'];
              $user->phonenumber = $data['phonenumber'];
              $user->email = $data['email'];
              $user->password = bcrypt($data['password']);
              $user->save();
              $user->roles()->attach(Role::where('name', 'User')->first());
              Auth::login($user);
      }
      

      与:

      public function create(array $data)
      {
              $user = new User();
              $user->name = $data['name'];
              $user->lastname = $data['lastname'];
              $user->phonenumber = $data['phonenumber'];
              $user->email = $data['email'];
              $user->password = bcrypt($data['password']);
              $user->save();
              $user->roles()->attach(Role::where('name', 'User')->first());
      
              return $user;
      }
      

      如果您的 Laravel 框架和身份验证控制器代码是最新的,RegisterUsers trait 应该会为您解决问题。这也应该可以解决您遇到的问题。

      【讨论】:

        猜你喜欢
        • 2019-01-17
        • 2017-06-29
        • 1970-01-01
        • 2018-01-05
        • 2017-09-09
        • 2017-06-11
        • 2021-07-27
        • 1970-01-01
        • 2017-08-21
        相关资源
        最近更新 更多