【问题标题】:Authentication function not working - CodeIgniter身份验证功能不起作用 - CodeIgniter
【发布时间】:2019-05-03 09:27:06
【问题描述】:

我有以下代码来验证应用程序的用户。我已经能够在系统上注册用户,但在尝试使用正确的详细信息登录后,我的身份验证代码无法将用户重定向到应用程序。即使我使用了正确的用户详细信息,该页面也只会将用户重定向回登录页面。

控制器

var $salt = '%&)#$sfsf(abm@009011';

 function authenticate() {

    $username = $this->input->post('username');

    $this->db->where('phone', $username);
    $password =  $this->db->where('password', md5(crypt($this->input->post('password'), $this->salt)));
    $query = $this->db->get('user_login');        
    if ($query->num_rows = 1) {
        //echo "success";
         return true;
    } else
        return false;
    }

我还能在代码中做错什么? PS:CodeIgniter 初学者

【问题讨论】:

  • 很难在没有看到更多代码的情况下判断出了什么问题(除了使用赋值运算符而不是比较运算符)。您只是返回一个真/假值,但我们不知道您之后在做什么。您是否正在使用登录的用户数据生成会话?您的控制器是否检查该数据以“决定”他们是否允许您访问他们的方法?另外,我强烈建议您更改您选择散列密码的非常不安全的方式(使用 password_hash 而不是 crypt+md5+static salt,这实际上是不安全的)

标签: php codeigniter


【解决方案1】:

你分配的不是比较,你应该使用==而不是=

if ($query->num_rows == 1) {
}

【讨论】:

  • 好的..谢谢,但我仍然无法重定向到应用程序。它会将我重定向回登录页面
  • 打印查询并检查所有事情是否如您所愿。
  • 当我打印 query 时,我没有返回任何结果,但是当我在 if() 语句之前回显 $query->num_rows 时,我得到了 1
【解决方案2】:

不要使用var,而是使用==比较if()语句中的值

$salt = '%&)#$sfsf(abm@009011';

 function authenticate() {

    $username = $this->input->post('username');

    $this->db->where('phone', $username);
    $password =  $this->db->where('password', md5(crypt($this->input->post('password'), $this->salt)));
    $query = $this->db->get('user_login');        
    if ($query->num_rows() == 1) {
        //echo "success";
         return true;
    } else
        return false;
    }

【讨论】:

  • 好的..谢谢,但我仍然无法重定向到应用程序。它会将我重定向回登录页面
  • echo $query->num_rowsif() 声明之前的结果是什么?
  • 结果是1
  • @RoboPHP 应该是 $query->num_rows() 而不是 $query->num_rows
  • 好的,如果您直接发布数据,我的意思是您没有从 ajax 调用该函数,那么您可以使用:redirect('Your controller name') 而不是 return true 语句;
猜你喜欢
  • 2019-01-18
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 2012-10-04
相关资源
最近更新 更多