Php 无法使用Codeigniter MVC系统通过AJAX传递登录信息
下午好 我正在寻找一些关于Codeigniter的建议,并获得一个Ajax登录表单,以便与我的控制器一起工作,在成功登录后,将我带到特定用户的仪表板/主屏幕 以下是我的“auth.php”控制器代码:Php 无法使用Codeigniter MVC系统通过AJAX传递登录信息,php,html,ajax,codeigniter,Php,Html,Ajax,Codeigniter,下午好 我正在寻找一些关于Codeigniter的建议,并获得一个Ajax登录表单,以便与我的控制器一起工作,在成功登录后,将我带到特定用户的仪表板/主屏幕 以下是我的“auth.php”控制器代码: class Auth extends CI_Controller { function __construct() { parent::__construct(); $this->load->model('data_model'); $this->load
class Auth extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->model('data_model');
$this->load->database();
}
//** Check Status & Redirect To Login **//
public function index() {
if($this->session->userdata('admin_login') == 1)
redirect(base_url() . 'admin/dashboard', 'refresh' );
else if($this->session->userdata('staff_login') == 1)
redirect(base_url() . 'staff/dashboard', 'refresh' );
else if($this->session->userdata('client_login') == 1)
redirect(base_url() . 'client/dashboard', 'refresh' );
$this->load->view('login');
}
//** Login Function **//
function ajax_login() {
$response = array();
//** Credentials of user login **//
$email = $_POST["email"];
$password = $_POST["password"];
$response['submitted_data'] = $_POST;
//** Validating the login **//
$login_status = $this->validate_login($email, $password);
$response['login_status'] = $login_status;
if ($login_status == 'success') {
$response['redirect_url'] = $this->session->userdata('last_page');
}
}
//** Validating Credentials **//
function validate_login($email = '' , $password = '') {
$credentials = array('email' => $email, 'password' => sha1($password));
//** Checking Admin Credentials **//
$query = $this->db->get_where('admin', $credentials);
if ($query->num_rows() > 0) {
$row = $query->row();
$this->session->set_userdata('admin_login', '1');
$this->session->set_userdata('login_user_id', $row->admin_id);
$this->session->set_userdata('name', $row->name);
$this->session->set_userdata('login_type', 'admin');
return 'success';
}
&这是我的login.php视图
<div class="login-container">
<div class="row">
<div class="col-sm-6">
<script type="text/javascript">
jQuery(document).ready(function($)
{
// Reveal Login form
setTimeout(function(){ $(".fade-in-effect").addClass('in'); }, 1);
// Validation and Ajax action
$("form#login").validate({
rules: {
email: {
required: true
},
password: {
required: true
}
},
messages: {
email: {
required: 'Please enter your email.'
},
password: {
required: 'Please enter your password.'
}
},
// Form Processing via AJAX
submitHandler: function(form)
{
$.ajax({
url: "auth/validate_login",
method: 'POST',
dataType: 'json',
data: {
do_login: true,
email: $(form).find('#email').val(),
password: $(form).find('#password').val(),
},
success: function(resp)
{
show_loading_bar({
delay: .5,
pct: 100,
finish: function(){
// Redirect after successful login page (when progress bar reaches 100%)
if(resp.accessGranted)
{
window.location.href = 'auth/index';
}
else
{
toastr.error("You have entered wrong password, please try again. User and password is <strong>demo/demo</strong> :)", "Invalid Login!", opts);
$passwd.select();
}
}
});
}
});
}
});
// Set Form focus
$("form#login .form-group:has(.form-control):first .form-control").focus();
});
</script>
<!-- Errors container -->
<div class="errors-container">
</div>
<!-- Add class "fade-in-effect" for login form effect -->
<form method="post" role="form" id="login" class="login-form fade-in-effect">
<div class="login-header">
<img src="<?php echo base_url();?>assets/images/logo@2x.png" alt="" width="80" />
<span>log in</span>
</a>
<p>Dear user, log in to access your user area!</p>
</div>
<div class="form-group">
<label class="control-label" for="username">Username</label>
<input type="text" class="form-control input-dark" name="email" id="email" placeholder="Email" data-mask="email" />
</div>
<div class="form-group">
<label class="control-label" for="passwd">Password</label>
<input type="password" class="form-control input-dark" name="password" id="password" placeholder="Password" />
</div>
<div class="form-group">
<button type="submit" class="btn btn-dark btn-block text-left">
Log In
</button>
</div>
<div class="login-footer">
<a href="<?php echo base_url();?>auth/forgot_password">Forgot your password?</a>
</div>
</form>
jQuery(文档).ready(函数($)
{
//显示登录表单
setTimeout(函数(){$(“.fade-in-effect”).addClass('in');},1);
//验证和Ajax操作
$(“表单#登录”)。验证({
规则:{
电邮:{
必填项:true
},
密码:{
必填项:true
}
},
信息:{
电邮:{
必填项:“请输入您的电子邮件。”
},
密码:{
必需:“请输入您的密码。”
}
},
//通过AJAX进行表单处理
submitHandler:函数(表单)
{
$.ajax({
url:“验证/验证\登录”,
方法:“POST”,
数据类型:“json”,
数据:{
do_登录:正确,
电子邮件:$(表单).find('#email').val(),
密码:$(表单).find('#password').val(),
},
成功:功能(resp)
{
显示加载条({
延迟:.5,
百分之一百,
完成:函数(){
//成功登录页面后重定向(当进度条达到100%时)
如果(分别授予访问权)
{
window.location.href='auth/index';
}
其他的
{
toastr.error(“您输入了错误的密码,请重试。用户和密码为demo/demo:),“无效登录!”,选项);
$passwd.select();
}
}
});
}
});
}
});
//设置窗体焦点
$(“form#login.form组:has(.form-control):first.form-control”).focus();
});
资产/图像/logo@2x.png“alt=”“width=“80”/>
登录
尊敬的用户,请登录以访问您的用户区域
用户名
暗语
登录
从上面的代码中,我声明了一个模型,但它实际上并不包含任何信息,因为我的控制器中有一个get DB。希望有人能对此有所了解
谢谢大家!
Zak Hargreaves。CodeIgniter希望CSRF令牌值与表单数据一起传递。它包含在一个隐藏的表单输入中,当您使用CodeIgniter的
form\u open()
函数时会自动构造该表单输入。然后当您使用ajax()时
,您必须包含此隐藏CSRF字段的值。您的浏览器控制台应该向您显示对ajax()的某种错误响应
request。当我进入控制台并尝试登录时,我通常会得到一个POST ok,它会传递给我的控制器-这不是查询数据库-我觉得我遗漏了什么。任何其他帮助都会很棒。我仔细查看了你的代码,我认为你需要从头到尾阅读CodeIgniter文档。我没有尝试意思是说。当我学习CI时,我也做了同样的事情……我完整地阅读了手册,并执行了所有包含的练习、示例和教程。做每件事只需要3到4个小时。你的代码有什么问题?你没有使用CI模型连接到数据库,而是调用了CI Cont中的另一个函数这是完全错误的。您永远不会让一个控制器函数调用另一个控制器函数。请参阅:但是,您的根本问题是您没有从PHP向ajax()
函数输出任何内容。您需要回显响应。