我的帖子请求将转到生产服务器上的页面过期页面

问题描述 投票:0回答:2

我是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。请检查。

laravel post production-environment
2个回答
0
投票

您所说的ajax代码很好,因为您说的是它在本地环境中工作。实际上,您的服务器不是永久性缓存/存储正在生成的新文件,例如会话文件。没有持续的会话意味着没有csrf验证...

尝试将数据库用作会话驱动程序。

  1. 使用php artisan session:table创建用于会话的表
  2. 在服务器环境文件上,将SESSION_DRIVER从文件更改为数据库,并在服务器上配置缓存。 如果服务器没有环境文件,请在config / session.php中更改默认会话驱动程序

这会将会话信息存储到您在步骤1中创建的数据库表中。

https://laravel.com/docs/5.8/session#driver-prerequisites


0
投票

我建议一些解决方案,每个解决方案都可以解决您的问题:

1。请参见在浏览器的Inspect中是否为csrf隐藏输入创建了令牌。如果该输入具有null输入,则无论如何都应使用{{csrf_token}}手动设置令牌(例如,加载页面时使用jquery )。

2。在某些情况下,使用{!! csrf_field() !!}代替{{csrd_field()}}可行

3。转到session.php中的config folder并找到domain并将其更改为您的域名。

4。为您的路线设置['middleware' => ['web']]

我希望这些解决方案之一对您有用

© www.soinside.com 2019 - 2024. All rights reserved.