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; "> 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 用户认证,怎样用Flash Message显示错误信息