2015-11-26 69 views
0

在我的数据库设计中,我有两个表格,People & Auth。 Auth表保存认证信息和person_id,而People表保存所有其他信息(名称,地址等)。表格之间存在一对一的关系,如下面的模型所示。Laravel 5 - 注册时创建两张表

我已经分居了数据的原因分为两个表是因为在我的 应用程序,我将不得不谁没有认证 功能(用户到用户)许多人。

应用/ Auth.php

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

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

应用/ Person.php

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

在我AuthController :: create()方法,我试图既填充型号与用户提供的信息是这样的:

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对象,那么还有Cookie和奖励点... $ user对象中不需要验证表数据。

编辑

我已经改变了我config/Auth.php文件如下(感谢@ user3702268)的答案指出以反映更改。但是,我现在发现我的控制器有错误。在AuthController :: create()方法中,我返回App/Person对象,这会引发一个ErrorException看到App/Person如何不实现Authorizable特性。我不希望我的App/Person对象是可授权的,但它是我希望在我的视图中作为已认证的$用户返回的对象。怎么样?我应该重写postRegister方法吗?还是有更多的Laravel方法?

EDIT 2

我现在回到它采用authorizable性状$ AUTH对象。在我的意见/控制器我试图访问使用Auth::user()->person但得到Class 'Person' not found错误

回答

2

你应该更换配置/ auth.php线31包含用户名和密码类应用程序\ User类人:

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

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

务必使用bcrypt($请求 - >获取( '密码'))辅助或哈希::化妆($请求 - >达到节约之前加密密码( '密码'))。然后,你可以通过调用验证:

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

可以使用检索认证的用户这样的:

Auth::user() 
+0

我'配置/ Auth.php'注意到了,我也应该改变'“表” => 'auth''因为我的表名也不同。表格正在填充正确,我返回我的Person对象! +1 由于我将表格更改为auth,我的模型更改为Auth ...将导致与Auth外观发生冲突? –

+0

不,你的Auth类应该在另一个名字空间中,默认是把它放在App \ Auth命名空间中。如果你想使用这两个类,你应该别名一个或两个例如 使用App \ Auth作为AuthModel使用Auth <---- Auth facade – leyduana

+0

您应该返回您的Auth类,并且可以使用以下关系访问视图中的Person类: Auth :: user() - > – leyduana