Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cakephp登录页面没有';我哪儿也去不了_Cakephp_Authentication_Redirect_Cakephp 2.0 - Fatal编程技术网

cakephp登录页面没有';我哪儿也去不了

cakephp登录页面没有';我哪儿也去不了,cakephp,authentication,redirect,cakephp-2.0,Cakephp,Authentication,Redirect,Cakephp 2.0,我曾尝试设置登录页面,但当我尝试登录时,即使使用错误的用户名/密码,cake也会重定向到登录页面(注销功能会正确重定向)。即使我插入了错误的信息,我也不会看到错误闪烁,我不明白。这是我的控制器代码: class UsersController extends AppController { public $name='Users'; public $layout='pagelayout'; public $uses=array('User'); public function before

我曾尝试设置登录页面,但当我尝试登录时,即使使用错误的用户名/密码,cake也会重定向到登录页面(注销功能会正确重定向)。即使我插入了错误的信息,我也不会看到错误闪烁,我不明白。这是我的控制器代码:

class UsersController extends AppController {
public $name='Users';
public $layout='pagelayout';
public $uses=array('User');



public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('add', 'logout', 'overview');
}

public function login() {
$this->set('title', 'Log in to your Gulf Shores 4 Less account');
if ($this->request->is('post')) {
    if ($this->Auth->login()) {
        return $this->redirect($this->Auth->redirect());
    } else {
        $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
    }
}
}

这是我的模型:

<?php
App::uses('AuthComponent', 'Controller/Component');
class User extends AppModel {
public $name='User';
public $hasMany=array('Unit', 'Complex', 'Coupon', 'Location', 'Image', 'Charter', 'Course', 'Nightclub', 'Store');

public function beforeSave() {
if (isset($this->data[$this->alias]['password'])) {
    $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
}
return true;
}
public $validate = array(
    'username' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'A username is required'
        )
    ),
    'password' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'A password is required'
        )
    ),
    'role' => array(
        'valid' => array(
            'rule' => array('inList', array('admin', 'advertiser')),
            'message' => 'Please enter a valid role',
            'allowEmpty' => false
        )
    )
  );
}

?>

以下是来自AppController的代码:

<?php
class AppController extends Controller {
 public $components = array(
    'Session',
    'Auth' => array(
        'loginRedirect' => array('controller' => 'users', 'action' => 'overview'),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'index')
    )
);


function beforeFilter() {
    $this->Auth->allow('login','index', 'view', 'condos', 'houses', 'hotels_and_motels', 'print_all_coupons', 'print_coupon', 'search', 'golf', 'charters', 'events', 'nightlife', 'shopping', 'visitors_info', 'contact_us');
}
}
?>

以下是查看代码:

<div class="users form">
<?php echo $this->Session->flash('auth'); ?>
<?php echo $this->Form->create('User');?>
<fieldset>
    <legend><?php echo __('Please enter your username and password'); ?></legend>
<?php
    echo $this->Form->input('username');
    echo $this->Form->input('password');
?>
</fieldset>
<?php echo $this->Form->end(__('Login'));?>
</div>


如您所见,我几乎复制并粘贴了Cakephp-2.0手册中的内容。我的db表和手册的唯一区别在于,我的密码作为MD5散列存储在我的users表中。我不知道这在哪里出轨了。

请确保使用身份验证组件散列存储密码。抱歉,不支持“普通”md5密码。生成的哈希蛋糕比md5更复杂


有关如何散列密码的信息,请参阅。如果您是从使用md5哈希的应用程序迁移,您必须为所有用户将所有密码重置为随机密码。

您可以尝试在AppController.php文件中使用以下代码

AppController.php

$this->Auth->authenticate = array(
            AuthComponent::ALL => array('userModel' => 'User'),
            'Form' => array(
                'fields' => array('username' => 'email')
            )
        );
        $this->Auth->authorize =false;
        $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
        $this->Auth->fields = array('username' => 'email', 'password' => 'password');
        $this->Auth->loginRedirect = array('controller' => 'media', 'action' => 'index/');
        $this->Auth->logoutRedirect = '/logout';
        $this->Auth->loginError = 'Invalid e-mail / password combination. Please try again';

更新我更改了我的login()函数,当登录信息不正确时,该函数现在会给我一条错误消息。我认为现在的问题是,因为我的密码存储在带有MD5散列的db中,所以它没有检查正确的密码。如何告诉Cake使用MD5哈希检查器?请再次更新。我读到cake中的默认散列是sha1,所以我将我的一个密码更改为sha1散列,但我仍然停留在登录页面上(虽然它仍然告诉我用户名/密码不正确)。好的,我已经坚持将存储到我的模型中,但我通过创建一个用户进行了测试(它工作正常,重定向到正确的页面)。问题是我已经创建的用户有错误的散列。我完全可以更改它们,因为这一切仍处于测试模式,我只需要确切地知道cake使用的是什么,这样我就可以找到正确的在线哈希生成器。phpmyadmin中有一个SHA1函数,可以用来转换。这就是你一直在做的吗?嗯,不,我没有。我不知道我能做到!这是我第一天尝试创建一个登录页面,使用哈希和所有东西。无论如何,我进入数据库,在一个已经创建的用户上输入密码,将SHA1作为一个函数放在phpmyadmin中,但它不起作用。仍然给我“不正确的用户名/密码”错误,并且没有重定向。@HeatherWalters除了Cake自己的哈希方法外,没有“正确的在线哈希生成器”。散列方法使用应用程序配置文件中的唯一密钥,因此非常安全。除了
AuthComponent::password
方法之外,没有任何在线工具能够生成适用于您的cake应用程序的哈希值(并且只有在从您自己的应用程序中调用该方法时)。您还可以使用“原始”文本调用此函数,如:
AuthComponent::password('secret')并应返回数据库中所需的正确哈希值。这正是我需要的,谢谢!我的函数还有一个问题,没有将用户id传递到视图中,将在另一个线程中发布。将你的答案标记为已接受。