从所有教程中,我应该能够授权用户然后跳转到任何其他页面,并且登录是持久的。但是,这不起作用。
自定义编译的PHP LAMP堆栈。应用程序存储是可写的。
与教程的唯一区别是我使用的是电子邮件而不是用户名。 http://laravelbook.com/laravel-user-authentication/ http://codehappy.daylerees.com/authentication
会话有效,因为我能够将var存储到会话中并在不同的页面上读取。
models / User.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()
{
echo $this->getKey();
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;
}
}
配置/ auth.php
return array(
'driver' => 'eloquent',
'model' => 'User',
'table' => 'users',
'reminder' => array(
'email' => 'emails.auth.reminder',
'table' => 'password_reminders',
'expire' => 60,
),
);
配置/ session.php文件
return array(
'driver' => 'native',
'lifetime' => 120,
'files' => storage_path().'/sessions',
'connection' => null,
'table' => 'sessions',
'lottery' => array(2, 100),
'cookie' => 'laravel_session',
'path' => '/',
'domain' => null,
);
routes.php文件
Route::get('/', array('as' => 'home', function(){
return View::make('home');
}));
Route::get('login', array('as' => 'login', function () {
return View::make('login');
}))->before('guest');
Route::post('login', function () {
$user = array(
'email' => Input::get('email'),
'password' => Input::get('password')
);
if (Auth::attempt($user, true)) {
/*
return Redirect::route('home')
->with('flash_notice', 'You are successfully logged in.');
*/
} else {
/*
// authentication failure! lets go back to the login page
return Redirect::route('login')
->with('flash_error', 'Your email/password combination was incorrect.')
->withInput();
*/
}
// This shows the user as logged in
echo (Auth::check()) ? 'Logged in' : 'Not logged in';
});
// This shows the user as not logged in
Route::get('test', function () {
echo (Auth::check() == true) ? 'Logged in' : 'Not logged in';
});
表SQL
CREATE TABLE IF NOT EXISTS `users` (
`userId` bigint(10) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(250) DEFAULT NULL,
`password` varchar(124) DEFAULT NULL,
`name` varchar(250) DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`userId`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
INSERT INTO `users` (`userId`, `email`, `password`, `name`, `created_at`, `updated_at`) VALUES
(1, 'ben.test@smitty.com', '$2y$10$591gwvQKSGXihKruH1s.weHNM1DR/xzavW46vUuSBxEF7Jk0zZe1G', 'Ben Dauphinee', '2013-08-03 23:25:01', '2013-08-07 01:32:46'),
(2, 'jim@dandy.com', NULL, 'Jim Dandy', '2013-08-03 23:25:01', NULL);
产生的Auth :: user()信息
User Object
(
[table:protected] => users
[hidden:protected] => Array
(
[0] => password
)
[connection:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[userId] => 1
[email] => bookworm51@hotmail.com
[password] => $2y$10$591gwvQKSGXihKruH1s.weHNM1DR/xzavW46vUuSBxEF7Jk0zZe1G
[name] => Ben Dauphinee
[created_at] => 2013-08-03 20:25:01
[updated_at] => 2013-08-06 22:32:46
)
[original:protected] => Array
(
[userId] => 1
[email] => bookworm51@hotmail.com
[password] => $2y$10$591gwvQKSGXihKruH1s.weHNM1DR/xzavW46vUuSBxEF7Jk0zZe1G
[name] => Ben Dauphinee
[created_at] => 2013-08-03 20:25:01
[updated_at] => 2013-08-06 22:32:46
)
[relations:protected] => Array
(
)
[visible:protected] => Array
(
)
[fillable:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
[touches:protected] => Array
(
)
[with:protected] => Array
(
)
[exists] => 1
[softDelete:protected] =>
)
答案 0 :(得分:15)
问题是您使用“userId”作为主要ID - 但您没有告诉Laravel。
Per the Laravel docs:“Eloquent还会假设每个表都有一个名为id的主键列”
<强>要么强>
将表格中的userId
更改为id
(我的个人建议 - 如果您的桌子始终有ID,它会让您的生活更轻松)
或将其添加到您的User.php文件中:
protected $primaryKey = "userId";
答案 1 :(得分:1)
User
模型的副本非常有用
您可以在User
模型上验证以下内容。
如果User
模型实现了Illuminate \ Auth \ UserInterface。实现上述接口后,需要按如下方式定义方法。虽然Laravel没有记录,但Auth
驱动程序使用此UserInterface
来验证凭据。看看http://laravel.com/api/class-Illuminate.Auth.UserProviderInterface.html
公共函数getAuthPassword() { 返回$ this-&gt;密码; }
公共函数getAuthIdentifier() { return $ this-&gt; getKey(); }
您可以验证数据库上的密码是否已加密。许多开发人员都有过在密码列上有明文密码的情况。 Auth::attempt
使用Hash::make()
自动对密码进行哈希处理,然后将其与users
表中的值进行比较。
希望这有帮助。
答案 2 :(得分:0)