2016-09-02 2 views
1

Я использую стандартную аутентификацию механизма в Laravel 5.3, построен по команде: php artisan make:auth.Как добавить данные в соответствующую таблицу в Auth Laravel?

Таким образом, он создал контроллер RegisterController со следующими методами:

protected function create(array $data) 
    { 

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

Итак, мне нужно расширить этот метод, чтобы добавить данные в соответствующую таблицу для таблицы пользователей. Для этого я делаю:

protected function create(array $data) 
    { 

     return User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ])->roles()->attach(Role::where('name', "admin"))->first()); 
    } 

После этого я получаю сообщение об ошибке:

FatalThrowableError in SessionGuard.php line 441: 
Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, null given, called in \vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php on line 32 

ответ

3

Я не использовал логику аутентификации Laravel, но похоже, что пользователь получает авторизовались сразу после их создания. Для входа пользователя в Laravel необходим объект пользователя, следовательно:

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

create() метод returnsModel. Вы, однако, добавили в оператор возврата, и если вы посмотрите на API, то метод returnsvoid, который в конечном итоге переводится в null, упомянутый в сообщении об ошибке.

То, что вы хотите сделать, это что-то вроде этого:

protected function create(array $data) { 

    // Create the User and store the object 
    $newUser = User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
    ]); 

    // Add extra data 
    $adminRole = Role::where('name', 'like', 'admin')->first(); 
    $newUser->roles()->attach($adminRole->id); 

    // Return the new User object 
    return $newUser; 
} 

Примечание: Я предположил, что вы имеете id столбец в вашей role(s) таблице.

Смежные вопросы