Laravel 5.2 忘记密码的模式弹出窗口显示 500 内部服务器错误,同时运行 ajax 功能

Posted

技术标签:

【中文标题】Laravel 5.2 忘记密码的模式弹出窗口显示 500 内部服务器错误,同时运行 ajax 功能【英文标题】:Laravel 5.2 Modal popup for forget Password displaying 500 internal server Error while running ajax function 【发布时间】:2018-02-14 12:50:36 【问题描述】:

我正在尝试检查天气电子邮件是否存在以发送重置密码链接。 为此,我正在使用 ajax 函数,但在运行 ajax 之前它显示 500 内部服务器错误。 我知道 500 是因为令牌未匹配错误,但我需要令牌来检查电子邮件是否存在。 但我认为是这样,表单标记令牌是自动生成的,然后也在使用 csrf_field() 但它显示相同的错误 500 内部服务器。只是帮助如何解决这个问题,我是否需要手动生成令牌。

查看:login.blade.php

    !! Form::open(array('url' => '/auth/login', 'class' => 'form-   login')) !!
    <div class="form-title"> <span class="form-title">Login</span> </div>
     <div class="form-group">
        <label class="control-label visible-ie8 visible-ie9">Username</label>
        <input class="form-control form-control-solid placeholder-no-fix required" type="text" autocomplete="off" placeholder="Email" name="email" />
      </div>

      <div class="form-group">
        <label class="control-label visible-ie8 visible-ie9">Password</label>
        <input class="form-control form-control-solid placeholder-no-fix passwordclass required" type="password" autocomplete="off" placeholder="Password" name="password" />
      </div>

    <div class="form-actions">
       <button type="submit" class="btn red btn-block uppercase clicklogin" style="background-color:#d5ed31 !important;border-radius:4px !important;border:1px solid #ddd;">Login</button>
     </div>


    <div class="form-actions">
      <div class="pull-left">
        <label class="rememberme mt-checkbox mt-checkbox-outline">
        <input type="checkbox" name="remember" value="1" />
          Remember me <span></span> </label>
      </div>

    <div class="pull-right forget-password-block"> <a class="btn-link" data-target="#modalforget" data-toggle="modal">Forgot Password? </a></div>
    </div>

    !! Form::close() !!

    <!-- END LOGIN FORM -->






     <!-- BEGIN FORGOT PASSWORD FORM-->
     !! Form::open(array('url'=>'password/reset','class' => 'form-horizontal create_forget_form','method'=>'POST', 'id' =>'forgetdata', 'files' => true)) !!

     csrf_field() 


    <div class="modal fade" id="modalforget" tabindex="-1"   data- >
    <div class="modal-dialog" style="width:760px !important;">
    <div class="modal-content" style="background-color:#26344b;padding:20px;border-radius:12px !important;">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
          <div class="form-title"> <span class="form-title">Forget Password</span> </div>
        </div>
        <div class="modal-body" style="height:auto !important;">
          <div class="row">
            <div class="col-md-12">
                <div class="form-group">
                    <strong style="color: #ffffec; font-size: large; ">&nbsp; &nbsp; &nbsp; &nbsp; Please enter your email. A password reset link will be sent to this email.</strong>
                  </div>
                </div>
            </div>
          <div class="row"></div>
          <div class="row">
            <div class="col-md-10">
              <div class="form-group">
                <div class="col-md-2"></div>
                <div class="col-md-10">
                <input class="form-control required" type="email" autocomplete="off" placeholder="Email"  id="forget_email" name="forget_email"style="font-size: large;" />
                        <span class="my-error-class" id="email_status"></span>
                </div>
              </div>
            </div>
          </div>
      <div class="modal-footer">
          <button type="button" value="Submit" id="submitButton" class="btn green">Submit</button>
          <button type="button" value="Cancel" class="btn default red" data-dismiss="modal">Cancel</button>
          <button type="reset" value="Clear" class="btn blue">Clear</button>
      </div>
        </div>
        </div>
      </div>
  </div>
</form>  

login.blade.php 中的 Ajax 函数

<script type="text/javascript">
 $('#submitButton').click(function()
  var formdata=new FormData($(this)[0]);
    $.ajax(
        url:" URL::to('password/reset') ",
        type: 'POST',
        data: formdata,
        async: false,
        cache: false,
        contentType: false,
        processData: false,
        context:this,
        dataType: "json",
        success: function (returndata)
        
                if(returndata == 0)
            
                $( '#email_status' ).html('This Email does not Exists');
                return false;

            
            else
            
                $( '#email_status' ).html("");
                return false;
            
        ,
        error: function(data)
        
            console.log(data);
        
    );
);
</script>

路线文件:

Route::group(['middleware' => 'auth'], function()
 
    Route::post('password/reset','Auth\AuthController@resetPassword');

控制器身份验证\AuthController@resetPassword:

 public function resetPassword()
  
    $email =Input::get('forget_email');
    $user_email = DB::table('users')->where('email', $email)->whereNull('deleted_at')->first();
    if($user_email)
    
        return '1';
    
    else
    
        return '0';
    

 

Screen Shot Of Error

【问题讨论】:

【参考方案1】:

我认为你必须在auth 组之外写下你的路线。

Route::post('password/reset','Auth\AuthController@resetPassword');

【讨论】:

@ratnesh,把你的函数名改成驼峰式。 Resetpassword 并在路线中更改它。这可能是问题所在。 这是@ratnesh 的问题?【参考方案2】:

问题是您将POST 请求与ajax 一起使用,并且对于每个发布请求,您必须通过csrf-token 与以下请求一起传递:

headers: 
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
,

把它放在你的 ajax 代码中,一切都会好起来的。

或者如果您想从 CSRF 验证中排除特定 URI,请转到 project/app/Http/Middleware,有一个文件 VerifyCsrfToken.php 将路由列表放入:

protected $except = [
   // route list here
];

这里定义的所有路由都从csrf-token检查中排除。

【讨论】:

其实我已经写在上面的脚本标签 $.ajaxSetup( headers: 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr ('内容') ); POST localhost/selfcomply/public/password/reset 422(无法处理的实体) 我也试过了,但它显示了我在上面发布的 sam 422 错误:protected $except = ['password/reset','Auth\AuthController@reset_password'];

以上是关于Laravel 5.2 忘记密码的模式弹出窗口显示 500 内部服务器错误,同时运行 ajax 功能的主要内容,如果未能解决你的问题,请参考以下文章

打印 laravel Blade 的内容(使用 Laravel 5.2)

电脑登录密码忘记了怎么找回?

Laravel 5.2 更改用户密码功能

Laravel 5.2 用户认证,怎样用Flash Message显示错误信息

Laravel php artisan 显示另一个弹出窗口,这是一个错误吗?

无法在 laravel 5.2 中发送没有发件人地址的消息我已经设置了 .env 和 mail.php