我想使用列电子邮件和密码登录。
密码在注册期间进行哈希处理并保存到数据库('driver' => 'database'
)。
电子邮件列不是主键,但只是唯一的。
AuthController.php:
// Get all the inputs
$userdata = array(
'email' => Input::get('username'),
'password' => Input::get('password')
);
// Declare the rules for the form validation.
$rules = array(
'email' => 'Required',
'password' => 'Required'
);
// Validate the inputs.
$validator = Validator::make($userdata, $rules);
// Check if the form validates with success.
if ($validator->passes())
{
// Try to log the user in.
if (Auth::attempt($userdata, true))
{
// Redirect to homepage
return Redirect::to('')->with('success', 'You have logged in successfully');
}
else
{
// Redirect to the login page.
return Redirect::to('login')->withErrors(array('password' => 'password invalid'))->withInput(Input::except('password'));
}
}
无论如何,我刚收到错误: ErrorException 未定义的索引:id
它也告诉我这个:
public function getAuthIdentifier()
{
return $this->attributes['id'];
}
我做错了什么?感谢
修改
用户模型:
<?php
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password');
/**
* Get the unique identifier for the user.
*
* @return mixed
*/
public function getAuthIdentifier()
{
return $this->getKey();
}
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->password;
}
/**
* Get the e-mail address where password reminders are sent.
*
* @return string
*/
public function getReminderEmail()
{
return $this->email;
}
}
答案 0 :(得分:0)
getAuthIdentifier 是一种接口方法。 GenericUser类正在实现该方法并需要用户ID。
因此,请检查您的模型上是否有 id 属性。
答案 1 :(得分:0)
您很可能没有在用户表中分配主键,ID
应该是主键,您还可以在User
模型中添加以下内容以指定自定义主键:< / p>
protected $primaryKey = 'id';
确保user
表中的主键与此($primaryKey
)匹配,表示必须相同。
答案 2 :(得分:0)
如果这有助于将来这里有人解决这个问题。正如@WereWolf建议您确实要设置
protected $primaryKey = 'id';
在您的模型中,但您的驱动程序也应该在您的auth.php配置中“eloquent”。
'driver' => 'eloquent',
这将告诉laravel使用您的Eloquent模型作为用户对象而不是数据库表中的通用用户对象。