我在我的项目中使用KeystoneJS的Passport身份验证插件.
如果用户帐户存在并且与所使用的社交网络绑定,则一切都很有效.但是,在创建新用户时,使用config选项'auto create user': true,我最终会在oauth回调路由上出现500错误.日志说它是验证错误.
ValidationError: Validation failed
at model.Document.invalidate (/app/node_modules/keystone/node_modules/mongoose/lib/document.js:1021:32)
at /app/node_modules/keystone/node_modules/mongoose/lib/document.js:970:16
at validate (/app/node_modules/keystone/node_modules/mongoose/lib/schematype.js:610:7)
at /app/node_modules/keystone/node_modules/mongoose/lib/schematype.js:627:9
at Array.forEach (native)
at SchemaString.SchemaType.doValidate (/app/node_modules/keystone/node_modules/mongoose/lib/schematype.js:614:19)
at /app/node_modules/keystone/node_modules/mongoose/lib/document.js:968:9
at process._tickCallback (node.js:419:13)
Run Code Online (Sandbox Code Playgroud)
可能是什么导致了这个?
编辑
用户模型:
var keystone = require('keystone'),
Types = keystone.Field.Types,
social = require('keystone-social-login');
/**
* User Model
* ==========
*/
var User = new keystone.List('User');
User.add({
name: { type: Types.Name, required: true, index: true },
email: { type: Types.Email, initial: true, required: true, index: true …Run Code Online (Sandbox Code Playgroud) 我正在为 Chrome 编写一个简单的扩展程序。
用户可以选择设置配置文件名称
如何在扩展程序中获得该名称“lan”?
这是一个非常简单的扩展
清单文件
{
"manifest_version": 2,
"name": .."description"...
...
"background": {
"scripts": ["background.js"]
},
...
}
Run Code Online (Sandbox Code Playgroud)
背景.js
// how to get the profile name here?
// chrome.what.user.profile.name??
Run Code Online (Sandbox Code Playgroud) 我在一个对象中有两个函数
var obj = {};
obj.fn1 = function(){ console.log('obj.fn1'); return this; };
obj.fn2 = function(){ console.log('obj.fn2'); return this; };
Run Code Online (Sandbox Code Playgroud)
我希望能够做到
obj.fn1.fn2()
obj.fn2.fn1()
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
编辑:fn1和fn2可能是功能或属性访问器,我不只要关心他们做的东西.
我在许多图书馆看过它,比如粉笔 color.red.bold('string').
我正在尝试将PhantomJS与Babel从ES6编译到ES5的脚本一起使用.
对于某些功能,Babel在文件末尾添加了一些辅助函数(比如_asyncToGenerator和_typeof)来评估代码.
但是在Phantom中,有一个evaluate(function(){…})在浏览器上下文中执行的函数,因此它无法访问babel放入的那些辅助函数.
例如,如果我有一个代码:
var page = require('webpage').create();
page.open(url, function(status) {
var title = page.evaluate(function() {
typeof(document.title);
});
});
Run Code Online (Sandbox Code Playgroud)
它编译成
var page = require('webpage').create();
page.open(url, function(status) {
var title = page.evaluate(function Executed_in_Browser_Context() {
_typeof(document.title);
});
});
function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; }
Run Code Online (Sandbox Code Playgroud)
注意typeof已更改为_typeof(对于涉及ES6符号的某些功能)
这里,function Executed_in_Browser_Context它在浏览器上下文中执行,因此它无法访问function _typeof底部文件中定义的内容.因此导致错误
Can't find variable: _typeof
Run Code Online (Sandbox Code Playgroud)
怎么解决这个?
我尝试复制 …
我已成功在我的Express/Mongoose网络应用程序中实现了本地护照,但我无法确定如何正确呈现失败的登录消息.
这是我的登录路线:
app.get('/login', function(req, res) {
res.render('user/login', {
});
});
Run Code Online (Sandbox Code Playgroud)
有了这样的路线我该怎么报告无效登录?如果登录成功,将写id/ username到req.user对象,但并不能帮助我的"GET /login"路线,因为如果成功,你会重定向到你想去的页面.
这意味着req.user将始终undefined在您GET登录页面时.
我希望能够写出一条消息,上面写着'哟,登录无效!' 当发生以下事情时:
我可能希望根据发生的情况输出不同的消息.
当我实现LocalStrategy时,我使用了以下代码:
passport.use(new LocalStrategy({
usernameField: 'email'
},
function(email, password, fn) {
User.findOne({'login.email': email}, function(err, user) {
// Error was thrown.
if (err) {
return fn(err);
}
// User does not exist.
if (!user) {
return fn(null, false);
}
// Passwords do not match.
if (user.login.password != utility.encryptString(user.login.salt + password)) …Run Code Online (Sandbox Code Playgroud) 我正在使用本地护照在我的节点应用程序上提供本地身份验证.但是,我想将其更改为使用电子邮件地址而不是用户名进行身份验证.有没有办法做到这一点?
谢谢.
我在node.js中有一个服务器,使用快递和护照与passport-local策略.
我有数据库中的用户和通过护照我能够对它们进行身份验证,不幸的是当第二个请求来自同一客户端时该req.isAuthenticated()方法返回false.request(req.user = undefined)中也没有用户.
我也检查过,当我进行身份验证时,虽然我从用户那里回来了,但passport.authenticate('local'...我还是没有req.user填充.如果我尝试手动设置它,它就不会传播以用于后续请求.
我不明白我做错了什么,这是我的代码.
server.js
var express = require('express'),
compass = require('node-compass'),
routes = require('./server/routes')
http = require('http'),
path = require('path'),
passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
Database = require('./server/repositories/database'),
Configuration = require('./server/config').Config,
crypto = require('crypto');
var app = express();
app.enable("jsonp callback");
passport.use(new LocalStrategy(
function(email, password, done) {
process.nextTick(function () {
var userService = new UserService();
userService.login(email, crypto.createHash('md5').update(password).digest("hex"), function(error, user) {
if (error) done(error, user);
else …Run Code Online (Sandbox Code Playgroud) 我正在尝试将带有循环引用的对象从node.js服务器传递到客户端javascript.
服务器(node.js):
var object = { circular: object }
//....
app.get('/', function(req, res){
res.render('index.jade', {object: object});
});
Run Code Online (Sandbox Code Playgroud)
客户端Jade/Javascript
script var object = !{JSON.stringify(object)};
Run Code Online (Sandbox Code Playgroud)
在这里,我得到object包含循环引用的错误.
有没有
循环引用的任何方式来获取object客户端javascript ?
这样的事情可能吗?
for my_class_selector in _aClass _bClass _cClass _dClass _eClass ...
.my_class_selector
display none
Run Code Online (Sandbox Code Playgroud)
基本上我想创建一堆具有类似属性的类...
我正试图通过点击后退按钮获取一个页面,以便在客户端到达时从服务器加载新副本.默认情况下,它从浏览器内存加载旧的缓存副本.
有没有办法做到这一点?(在node.js中)
window.unload 如上所述添加空函数对我不起作用.
node.js ×6
passport.js ×4
express ×3
javascript ×3
mongoose ×2
babeljs ×1
back ×1
keystonejs ×1
oauth ×1
phantomjs ×1
pug ×1
refresh ×1
stylus ×1