我已经为客户端创建了角度为2的Web应用程序,并为服务器端创建NodeJS了express框架.
对于客户端,我生成了angular-cli在a上运行的项目lite-server,因此我的客户端和服务器在2个不同的服务上运行.
我想整合ADFS身份验证.要实现身份验证,我正在使用passport-saml包.我的服务器端有一个中间件API,需要用户进行身份验证.
直接到达服务器(没有客户端)时,身份验证过程正常.
但是,我无法访问API通过@angular/http.我尝试了一个GET来自服务器的简单请求(在端点使用中间件),因此我得到了没有重定向的身份验证页面(我不认为这是核心问题,但实际的实现是).
在对服务器和客户端使用单独的服务时,如何正确实现身份验证?
根据猫鼬内置验证器文档,我可以使用条件必填字段:
const schema = mongoose.Schema({
a: {
type: String,
required: function () {
return this.b === 1
}
},
b: {
type: Number,
required: true
}
});
Run Code Online (Sandbox Code Playgroud)
在此模式中,a仅当 propertyb等于时才需要该属性1。
尝试创建新文档按预期工作:
Model.create({ b: 1 }); // throws ValidationError (property a is required)
Run Code Online (Sandbox Code Playgroud)
和
Model.create({ b: 2 }); // creates document
Run Code Online (Sandbox Code Playgroud)
我的问题是尝试更新现有文档并将属性设置b为1因此a应该需要属性。
运行以下代码:
Model.findByIdAndUpdate(model._id, { b: 1 }, { new: true, runValidators: true});
Run Code Online (Sandbox Code Playgroud)
意外更新文档而不会抛出a需要属性的错误。
我的猜测是验证仅针对更新的属性(property b …