不能使用Angular POST数据到Laravel 5控制器,Error: 422 Unprocessable Ent
Can't POST data to Laravel 5 controller using Angular, Error : 422 Unprocessable Entity
我有一个使用angularjs
的登录表单。我想将输入的凭据发送到Laravel 5中的默认AuthController
。我的问题是服务器返回422不可处理的实体并在响应中说:email field is required
.
<form class="login-form" ng-controller="LoginController" name="loginForm" novalidate>
<input type="hidden" name="_token" ng-model="_token" value="<?php echo csrf_token(); ?>">
<h3 class="form-title">
Login
</h3>
<div ng-show="msg" class="alert alert-danger ng-cloak">
<button class="close" data-close="alert"></button>
<span ng-repeat="m in msgs">
@{{m}}
</span>
</div>
<div class="form-group" ng-class="{'has-error' : loginForm.$submitted && loginForm.username.$error.required}">
<!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
<label class="control-label visible-ie8 visible-ie9">
Username
</label>
<input ng-required="true" class="form-control form-control-solid placeholder-no-fix ltr" type="text" autocomplete="off" ng-model="username" name="username"/>
<span ng-show="loginForm.$submitted && loginForm.username.$error.required" class="help-block help-block-error ng-cloak">
Error Text
</span>
</div>
<div class="form-group" ng-class="{'has-error' : loginForm.$submitted && loginForm.password.$error.required}">
<label class="control-label visible-ie8 visible-ie9">
Password
</label>
<a href="javascript:;" id="forget-password" class="forget-password">
Text
</a>
<input ng-required="true" class="form-control form-control-solid placeholder-no-fix ltr" type="password" autocomplete="off" ng-model="password" name="password"/>
<span ng-show="loginForm.$submitted && loginForm.password.$error.required" class="help-block help-block-error ng-cloak">
Text
</span>
</div>
<div class="form-actions">
<button ng-click="login(loginForm.$valid,'.login-btn')" type="submit" data-loading-text="waiting" class="btn btn-success uppercase login-btn">ورود</button>
<label class="rememberme check pull-right">
<input type="checkbox" name="remember" ng-model="remember" value="1"/>
remember me
</label>
</div>
</form>
JS控制器:
this.msgs = '';
$scope.login = function (isValid, btn) {
if(isValid) {
$(btn).button('loading');
$scope.msgs = '';
data = {
username : $scope.username,
password : $scope.password,
_token : $scope._token
};
if($scope.remember)
data.remember = $scope.remember;
$http.post('/auth/login', data)
.success(function (data, status, headers, config) {
$(btn).button('reset');
$scope.msgs = '';
})
.error(function (data, status, headers, config) {
$(btn).button('reset');
// Handle login errors here
$scope.msgs = data;
});
}
};
如何解决使用用户名作为标识时默认laravel控制器的问题?
如果你想让他们用用户名而不是电子邮件登录,它应该像在你的AuthController
类上设置username
属性一样简单
class AuthController extends Controller {
protected $username = 'username';
}
原因是AuthController使用AuthenticatesUsers特性,它检查是否设置了$username
属性,如果没有设置,则默认为'email'
如果你想让他们有选择登录用户名或电子邮件,那么这是另一个故事。我为此写了一篇博文
根据文档,422错误消息是一个语义错误。
422(不可处理实体)状态码表示服务器理解请求实体的内容类型(因此是415(不支持的媒体类型)状态码不合适),以及请求实体的语法是正确的(因此是400(错误请求))状态码不合适),但无法处理包含的指令。例如,如果XML请求体包含格式良好的(即语法正确的),但是语义错误,XML指令。
在Laravel文档中,它说默认情况下,email字段被用作"username":
缺省情况下,auth。基本中间件将使用电子邮件列用户记录为"username"。
我建议你编辑授权。为了使用"username"作为主用户名,中间件配置中的基本参数
因为您只传递用户名和密码(并记住)字段。您可能需要在数据对象中使用电子邮件键!
var data = { email: 'superman@gmail.com', username: 'SuperMan', password: 'ASDASD', rememberMe: true};
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 从控制器返回后Ajax启动事件激发
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 如何在单击复选框后调用控制器方法
- 在控制器和数据对象之间同步数据
- 将Javascript数组发送到控制器ASP.NET MVC
- 角度控制器结构
- 如何在Jquery中发布后将值从视图返回到控制器
- 将值从html传递到AngularJS控制器
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 从控制器继承了隔离的作用域以生成可重用的指令
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- $scope.form.$error在Angular控制器中未定义
- 错误:Error:areq定义控制器时参数错误
- Angular'<控制器>作为<变量>'不是函数,在Error(本机)处未定义
- 不能使用Angular POST数据到Laravel 5控制器,Error: 422 Unprocessable Ent
- angularjs在解析延迟加载脚本和分别添加视图控制器时会抛出Error: [ng:areq]
- 为什么这个Angular控制器会抛出“Error: Unknown provider: nProvider <- n&q