嗨,我是Laravel的新手,我正在尝试用ajax表单提交构建一个登录表单。
我抄了
如果我从VerifyCsrfToken检查中排除它,我的代码工作完全正常。但是我确实希望令牌验证有效。
我读过多篇关于csrf令牌的帖子,尝试过,但仍然返回状态码419。
抱歉下面的长代码,但他们在这里(我知道我没有做任何关于设置会话和东西,请忽略现在因为代码返回419状态)
路线/web.php
Route::post('/auth/login', array('uses' => 'Auth\LoginController@postLogin'))->name('login');
Route::get('/landing', array('uses' => 'IndexController@landing'))->name('landing');
<head>
<meta charset="utf-8" />
<title>{{ config('app.name') }} ({{ config('app.env') }})</title>
<meta name="description" content="Latest updates and statistic charts">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no">
<meta name="csrf-token" content="{{ csrf_token() }}">
<!--
Global css & js here
-->
</head>
<body>
<form class="m-login__form m-form" method="post" action="{{ route('login') }}">
@csrf
<!--
Form content here
-->
</form>
<!--begin::Page Scripts -->
<script type="text/javascript">
var form_action = '{{ route('login') }}';
</script>
<script src="{{ URL::asset('login.js')}}" type="text/javascript"></script>
<!--end::Page Scripts -->
</body>
login.js
var handleSignInFormSubmit = function() {
$('#m_login_signin_submit').click(function(e) {
e.preventDefault();
var btn = $(this);
var form = $(this).closest('form');
form.validate({
rules: {
email: {
required: true,
email: true
},
password: {
required: true
}
}
});
if (!form.valid()) {
return;
}
btn.addClass('m-loader m-loader--right m-loader--light').attr('disabled', true);
var formData = form.serialize();
$.ajax({
url:form_action,
type:'POST',
data: formData,
headers:{
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
dataType: 'json',
success:function(data){
if(data.auth){
$(location).attr('href', data.intended);
}
else{
btn.removeClass('m-loader m-loader--right m-loader--light').attr('disabled', false);
showErrorMsg(form, 'danger', 'Incorrect username or password. Please try again.');
}
},
error: function (data) {
btn.removeClass('m-loader m-loader--right m-loader--light').attr('disabled', false);
showErrorMsg(form, 'danger', 'Incorrect username or password. Please try again.');
}
});
});
}
验证\登录控制器
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\URL;
use Response;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/landing';
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function postLogin(Request $request) {
$auth = false;
$credentials = $request->only('email', 'password', 'remember_token');
if (Auth::attempt($credentials, $request->has('remember_token'))) {
$auth = true; // Success
}
if($auth){
if ($request->ajax()){
$response = array(
'auth' => true,
'code' => 101,
'intended' => URL::route('landing')
);
}
else{
$response = array(
'auth' => true,
'code' => 102,
'intended' => URL::route('landing')
);
}
return Response::json($response);
}
else{
$response = array(
'status' => 'error',
'msg' => 'Error',
);
return Response::json($response);
}
}
}
部分响应错误
message: "", exception: "Symfony\Component\HttpKernel\Exception\HttpException",…}
exception: "Symfony\Component\HttpKernel\Exception\HttpException"
file: "/var/www/imas/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php"
line: 204
message: ""
更新:我把所有的东西都放在一个php文件中,确实把csrf-令牌元放在脚本中的ajaxset中,仍然得到419状态代码(注:“test123”是路由文件中的一个帖子方法)
<!DOCTYPE html>
<html lang="en">
<!-- begin::Head -->
<head>
<meta charset="utf-8" />
<title>{{ config('app.name') }} ({{ config('app.env') }})</title>
<meta name="description" content="Latest updates and statistic charts">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no">
<meta name="csrf-token" content="{{ csrf_token() }}">
<!--begin::Web font -->
<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.16/webfont.js"></script>
<script>
WebFont.load({
google: {"families":["Poppins:300,400,500,600,700","Roboto:300,400,500,600,700"]},
active: function() {
sessionStorage.fonts = true;
}
});
</script>
<!--end::Web font -->
<!--begin:: Global Mandatory Vendors -->
<!--end:: Global Mandatory Vendors -->
<!--begin:: Global Optional Vendors -->
<!--end:: Global Optional Vendors -->
<!--begin::Global Theme Styles -->
<!--end::Global Theme Styles -->
<!--begin::Page Vendors Styles -->
<!--end::Page Vendors Styles -->
<!--begin:: Custom CSS -->
@yield('pagespecificstyles')
<!--end:: Custom CSS -->
</head>
<!-- end::Head -->
<!-- begin::Body -->
<body class="m-page--fluid m--skin- m-content--skin-light2 m-header--fixed m-header--fixed-mobile m-aside-left--enabled m-aside-left--skin-light m-aside-left--fixed m-aside-left--offcanvas m-footer--push m-aside--offcanvas-default">
<!-- begin:: Page -->
<div class="m-grid m-grid--hor m-grid--root m-page">
<!-- BEGIN: Header -->
@include('admin.top')
<!-- END: Header -->
<!-- begin::Body -->
<div class="m-grid__item m-grid__item--fluid m-grid m-grid--ver-desktop m-grid--desktop m-body">
<!-- BEGIN: Left Aside -->
@include('admin.sidenav')
<!-- END: Left Aside -->
<div class="m-grid__item m-grid__item--fluid m-wrapper">
<form name="form1" id="form1">
Name: <input type="name" name="username" id="username"/><br/>
Password: <input type="password" name="password" id="password"/><br/>
<input type="button" value="Submit" name="btn_submit" id="btn_submit"/>
</form>
</div>
</div>
<!-- end:: Body -->
<!-- begin::Footer -->
@include('admin.footer')
<!-- end::Footer -->
</div>
<!-- end:: Page -->
<!-- begin::Scroll Top -->
@include('admin.scrolltop')
<!-- end::Scroll Top -->
<!-- begin:: Script -->
@include('admin.script')
@yield('pagespecificscripts')
<script>
var formPath = '{{ route('test123') }}';
$(document).ready(function(){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$('#btn_submit').click(function(){
var formData = $('#form1').serialize();
$.ajax({
type:'POST',
url:formPath,
data:formData,
success:function(data){
alert(data);
}
});
});
});
</script>
<!-- end:: Script -->
</body>
<!-- end::Body -->
</html>
在标题部分使用超文本标记语言:
<head>
<meta name="csrf-token" content="{{ csrf_token() }}" />
</head>
在你的ajax中,它用在数据中:
<script>
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': jQuery('meta[name="csrf-token"]').attr('content') } });
</script>
请参阅Laravel文件CSRF保护
我有一个springboot/openapi应用程序。不依赖Spring Security性。通过swagger启动POST请求时,返回的状态为403。请求未到达控制器类。然而,Get请求确实有效,并返回状态200。 配置如下 application.yaml 403状态的原因可能是什么? 控制器
我正在做一个新项目,我想实现一个“等到网站打开”功能,如果http://switch-check.cf/index.php打开,然后继续。 现在,在我的帮助下。htaccess和php我尽了最大的努力。禁止访问php文件。因此,如果你试图访问我提到的网页,你应该得到一个 403拒绝访问 因此,我使用urllib(也尝试了请求)查看网站是否已打开或仍处于禁止访问状态然而,无论我尝试什么,我总是得到2
我希望根据响应对象错误动态返回HTTPStatus代码,如400、400、404等。我被提到这个问题--使用Spring3RESTful以编程方式更改http响应状态,但没有帮助。 我有一个带有方法的控制器类 是一个类,其中有上面使用的两个方法(和)。 我不想签入if条件并相应地返回响应代码,有没有其他更好的方法来做到这一点?
问题内容: 我刚刚更新了Angular + Ionic的新版本,并且处理远程请求的方法停止工作并始终返回404响应。 请求如下: 处理远程请求的方法的代码如下: 但是没有运气。 服务器端通过这种方式处理请求: 如果我试图使用邮递员或卷曲发送请求,一切似乎都在工作。 离子信息: AngularJS版本: 我该如何解决? 非常感谢您的任何建议 问题答案: 哼,我只是遇到了同样的问题:标头表明它已经被拿
问题内容: 我正在尝试通过使用Laravel创建RESTful API。我已经使用 php artisan make:controller RestController 创建了我的控制器,这是我的控制器代码: 我在我的routes / web.php文件中添加了以下代码行来创建此路由: 当我尝试在GET / person上测试此api时,它可以正常工作,但在POST和PUT上,我从Laravel获
问题内容: 好的,我已经到处寻找了。基本上,我们使用的是跨域请求的$ http请求。我们的服务器允许该域,当请求返回200时,一切正常。但是,无论何时我们的服务器返回错误500、401,无论如何,Angular都认为这是CORS问题。 我用Fiddler调试了响应,以验证服务器是否返回了500,但Angular阻塞了。 这是请求: 然后在控制台中,我将看到: XMLHttpRequest无法加载f