我是laravel的新手。我最近与laravel完成了一个项目,并将其上传到生产服务器上。一切都顺利完成,但我现在面临着问题。当我尝试登录并发送发帖请求时,它总是转到419页过期页。当我尝试登录同一应用程序上的管理区域时,同样的问题也给我CSRF不匹配错误。我正在尝试借助AJAX登录到同一应用程序的后端。
我正在使用laravel 5.8。*版。它与http很好,但是当我将它移到生产服务器上时。在https域上,当我尝试输入凭据并登录到应用程序时,它会将我发送到页面过期页面。
如果您知道为什么会发生,请告诉我。任何帮助,将不胜感激。谢谢!
这是我的html代码:-
<form action="<?php echo url('admin/checkLogin'); ?>" class="col-lg-12" id="admin_sign_in_form"
method="post">
{{ csrf_field() }}
<div class="alert alert-danger loginerror" style="display: none;"><i
class="fa fa-exclamation-circle"></i> wrong credential.
<button type="button" class="close" data-dismiss="alert">×</button>
</div>
<div class="alert alert-success loginsuccess" style="display: none;"><i
class="fa fa-exclamation-circle"></i> wrong credential.
<button type="button" class="close" data-dismiss="alert">×</button>
</div>
<h5 class="title">Sign in to your Account</h5>
<div class="form-group-pvr form-float">
<div class="form-line-pvr">
<input type="email" class="form-control" name="email" id="email">
<label class="form-label">Email</label>
@if ($errors->has('email'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
<span class="admin_email_err text-danger"></span>
</div>
</div>
<div class="form-group-pvr form-float">
<div class="form-line-pvr">
<input type="password" class="form-control" name="password" id="password">
<label class="form-label">Password</label>
@if ($errors->has('password'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
<span class="admin_pass_err text-danger"></span>
</div>
</div>
{{-- <div class="form-check pull-left">
<label class="form-check-label">
<input class="form-check-input" type="checkbox" value="">
<span class="form-check-sign"></span>
Remember me
</label>
</div> --}}
<div class="col-lg-12 m-t-10">
{{--<a href="#" id="admin_sign_in_btn" class="btn btn-purple waves-effect">Sign In</a>--}}
<button type="submit" id="adminLoginBtn" class="btn btn-purple btn-block waves-effect">Login</button>
</div>
{{--<div class="col-lg-12 m-t-20">--}}
{{--<a class="" href="pvr_forgot_password.html">Forgot Password?</a>--}}
{{--</div>--}}
</form>
这是我的Ajax代码:-
$(document).ready(function () {
$("#admin_sign_in_form").on('submit', function (e) {
e.preventDefault();
var error = 0;
let adminemail = $("#email").val();
let adminpassword = $("#password").val();
if(adminemail == ''){
error++;
// $('.admin_email_err').html("Please Enter email");
}else{
// $('.admin_email_err').html("");
}
if(adminpassword == ''){
error++;
// $('.admin_pass_err').html("Please Enter password");
}else{
// $('.admin_pass_err').html("");
}
if(error==0) {
$.ajax({
url: '<?php echo url('/admin/checkLogin'); ?>',
type: 'POST',
data: new FormData(this),
dataType: 'json',
contentType: false,
processData: false,
success:function(data){
if(data['code']==200){
//alert(data['code']);
//$('#loginform').trigger("reset");
$('.loginerror').css('display','none');
$('.loginsuccess').html(data['msg']).css('display','block');
setTimeout(function(){
window.location.href = '<?php echo url('admin/dashboard'); ?>';
}, 1500);
}
if(data['code']==100){
$('.loginerror').html(data['msg']).css('display','block');
$('.formvalid').html("Invalid username and password");
}
}
});
}
});
});
我将连同ajax请求一起发送整个formdata,并且还添加了csrf_field。请检查。
您所说的ajax代码很好,因为您说的是它在本地环境中工作。实际上,您的服务器不是永久性缓存/存储正在生成的新文件,例如会话文件。没有持续的会话意味着没有csrf验证...
尝试将数据库用作会话驱动程序。
php artisan session:table
创建用于会话的表这会将会话信息存储到您在步骤1中创建的数据库表中。
我建议一些解决方案,每个解决方案都可以解决您的问题:
1。请参见在浏览器的Inspect
中是否为csrf隐藏输入创建了令牌。如果该输入具有null输入,则无论如何都应使用{{csrf_token}}
手动设置令牌(例如,加载页面时使用jquery )。
2。在某些情况下,使用{!! csrf_field() !!}
代替{{csrd_field()}}
可行
3。转到session.php
中的config folder
并找到domain
并将其更改为您的域名。
4。为您的路线设置['middleware' => ['web']]
。
我希望这些解决方案之一对您有用