我正在配置一個框架中的標誌,我現在每次都使用它。但是,由於某些原因,$tryagain
錯誤仍在填充。我知道我的數據庫中的信息是正確的,我甚至編輯了數據庫中的密碼以刪除散列以消除這個問題。不從表中讀取信息的表格
有沒有人有一個線索,爲什麼它一直拋出再次嘗試錯誤說信息是錯誤的?我可以註冊一個用戶,然後將他們重定向到此頁面以允許他們登錄,因此登錄是唯一的問題。
如果您需要框架中的更多代碼,請讓我知道。我不想發佈大量的代碼。
ini_set('display_errors', 1);
error_reporting(E_ALL);
require_once 'core/init.php';
if(Input::exists()) {
if(Token::check(Input::get('token'))) {
$validate = new Validate();
$validation = $validate->check($_POST, array(
'username' => array('required' => true),
'password' => array('required' => true)
));
if($validation->passed()) {
$user = new User();
$remember = (Input::get('remember') === 'on') ? true : false;
$login = $user->login(Input::get('username'), Input::get('password'), $remember);
//var_dump($login);
if($login) {
Redirect::to('index');
} else {
echo $tryagain = '<span class="signinpanel">' . "The information you entered did not match our records." . '</span>';
}
} else {
foreach($validation->errors() as $error) {
echo $error, '<br>';
}
}
}
}
形式
<?php
if(Session::exists('home')) {
echo '<p>' . Session::flash('home') . '</p>';
}
?>
<form name="Sign In" action="" method="POST" autocomplete="on" accept-charset= "utf-8">
<div class="field">
<label for="username">Username</label>
<input type="text" name="username" autocomplete="on" required>
</div>
<div class="field">
<label for="password">Password</label>
<input type="password" name="password" autocomplete="off" required>
</div>
<div class="field">
<label for="remember">
<input type="checkbox" name="remember" id="remember"> Remember me
</label>
</div><br>
<input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
<input type="submit" value="Sign In">
</form>
登錄功能
public function login($username = null, $password = null, $remember = false) {
if(!$username && !$password && $this->exists()) {
Session::put($this->_sessionName, $this->data()->id);
} else {
$user = $this->find($username);
if($user) {
if($this->data()->password === Hash::make($password, $this->data()->salt)) {
Session::put($this->_sessionName, $this->data()->id);
if($remember) {
$hash = Hash::unique();
$hashCheck = $this->_db->get('users_session', array('user_id', '=', $this->data()->id));
if(!$hashCheck->count()) {
$this->_db->insert('users_session', array(
'user_id' => $this->data()->id,
'hash' => $hash
));
} else {
$hash = $hashCheck->first()->hash;
}
Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry'));
}
return true;
}
}
}
return false;
}
散列文件
class Hash {
public static function make($string, $salt = '') {
return hash('sha256', $string . $salt);
}
public static function salt($length) {
return mcrypt_create_iv($length);
}
public static function unique() {
return self::make(uniqid());
}
}
懷疑答案在於登錄方法。嘗試設置該函數顯式返回一個「true」來檢查問題不在您上面粘貼的代碼中。 –
@GrahamNicol在這種情況下,我怎麼能做到這一點? – Becky
我將我的登錄功能添加到了我的問題中。 – Becky