2015-11-26 3 views
0

В моей базе данных у меня есть две таблицы, People & Auth. В таблице Auth хранятся данные аутентификации и person_id, в то время как таблица People содержит всю другую информацию (имя, адрес и т. Д.). Между таблицами существует взаимно однозначная взаимосвязь, как показано на приведенных ниже моделях.Laravel 5 - создание двух таблиц при регистрации

Причина я отделил данные на две таблицы, потому что в моем приложения, у меня будет много людей, которые не имеют возможности аутентификации (заказчиков к пользователю).

App/auth.php

class Auth extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract 
    { 
     use Authenticatable, Authorizable, CanResetPassword; 

     public function person() { 
      $this->belongsTo('Person'); 
     } 
    } 

App/Person.php

class Person extends Model 
{ 
    public function auth() { 
     $this->hasOne('Auth'); 
    } 
} 

В моей AuthController :: создать метод(), я пытаюсь заполнить и модели с предоставленной пользователем информацией:

protected function create(Request $request) 
    { 
     $person = \App\Person::create($request->all()); 

     $auth = new \App\Auth; 
     $auth->fill($request->all()); 
     $auth->person_id = $person->id; 
     $auth->save(); 

     return $person; 
    } 

В моем приложении я хотел бы авторизовать пользователя и передать объект $ user в качестве аутентифицированного лица для последующих маршрутов. Правильно ли я делаю это? Это лучший способ? Есть куки и бонусные баллы, если вы также можете объяснить, как получить объект $ user после аутентификации ... Данные таблицы Auth не нужны в объекте $ user.

EDIT

Я изменил мой config/Auth.php файл, чтобы отразить изменения, как указано в ответах ниже (спасибо @ user3702268). Однако теперь я обнаружил ошибку с моим контроллером. В методе AuthController :: create() я возвращаю свой объект App/Person, и это вызывает ErrorException, видя, как App/Person не реализует свойство Authorizable. Я не хочу, чтобы мой объект App/Person был авторизуемым, но это объект, который я хочу вернуть как аутентифицированный $ user в своих представлениях. Как? Должен ли я просто переопределить метод postRegister или есть ли более способ Laravel?

EDIT 2

Я теперь возвращая объект $ аутентификации, который использует authorizable черту. В моих взглядах/контроллерах Я пытаюсь получить доступ к лицу, использующий Auth::user()->person но получает Class 'Person' not found ошибки

ответ

2

Вы должны заменить App \ User Class в конфигурации/auth.php строке 31 класса, который содержит имя пользователя и пароль:

'model' => App\User::class, 

в

'model' => App\Auth::class, 

обязательно зашифровать пароль перед сохранением с помощью Bcrypt ($ request-> Get ('пароль')) помощник или Hash :: Марка ($ request-> Get ('пароль')).Затем вы можете проверить подлинность по телефону:

Auth::attempt([$request->get('username'), $request->get('password')]); 

Вы можете получить аутентификацию пользователя с помощью этого:

Auth::user() 
+0

Я заметил в 'конфигурации/Auth.php', что я должен также изменить' «стол» => 'auth'', поскольку мое имя таблицы также отличается. Таблицы заполняются правильно, и я возвращаю объект Person! +1 Поскольку я изменил свой стол на auth, а моя модель на Auth ... вызовет конфликты с фасадом Auth? –

+0

Нет, ваш класс Auth должен находиться в другом пространстве имен, по умолчанию он помещается в пространство имен App \ Auth. Если вы хотите использовать оба класса, вы должны использовать Alias ​​one или Both, например. use App \ Auth as AuthModel use Auth <---- Auth facade – leyduana

+0

Вы должны вернуть свой класс Auth, и вы можете получить доступ к классу Person в своих представлениях, используя соотношение: Auth :: user() -> person – leyduana

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