我想在AngularJS中使用socket.io.我找到了以下工厂:
app.factory('socket', function ($rootScope) {
var socket = io.connect();
return {
on: function (eventName, callback) {
socket.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
},
emit: function (eventName, data, callback) {
socket.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
if (callback) {
callback.apply(socket, args);
}
});
})
}
};
Run Code Online (Sandbox Code Playgroud)
它在控制器中使用如:
function MyCtrl($scope, socket) {
socket.on('message', function(data) {
...
});
};
Run Code Online (Sandbox Code Playgroud)
问题是每次访问控制器时都会添加另一个侦听器,因此在收到消息时会多次处理.
什么是将socket.io与AngularJS集成的更好策略?
编辑:我知道我可以在工厂中没有返回任何内容并在那里进行监听,然后在控制器中使用$ rootScope.$ broadcast和$ scope.$ on,但它看起来不是一个好的解决方案.
EDIT2:加入工厂
init: …Run Code Online (Sandbox Code Playgroud) 有一些方法可以通过谷歌驱动器同步窗口应用程序将我的本地git存储库同步到我的谷歌驱动器,但我想知道我是否可以完全绕过它的需要.
例如.
$ git remote add origin https://drive.google.com/<my_folder>/<my_repository>.git
$ git push github master
Run Code Online (Sandbox Code Playgroud) 我找不到关于此功能的文档,因此我无法使其正常工作.该函数何时被调用,它正在做什么以及它作为第一个参数采取了什么?我正试图从护照获取访问令牌,但无论如何都无法访问它.
passport.use(new FacebookStrategy({
clientID: APP_ID,
clientSecret: APP_SECRET,
callbackURL: "http://localhost:3000/",
},
function(accessToken, refreshToken, profile, done) {
User.findOrCreate({// what are these parameters?}, function (err, user) {
// when is this function called and what is it doing?
});
}
));
Run Code Online (Sandbox Code Playgroud)
如何从护照获取访问令牌?
更新的问题:PhpStorm | WebMatrix(IISExpress)| Xdebug.remote_port | - 哪个港口放在哪里?
我正在使用WebMatrix和IISExpress在我的Windows机器上运行localhost Web服务器.我已经安装了PHP和Xdebug,它们都在工作.
我有一个本地WordPress安装.
我现在正试图让PhpStorm使用Xdebug进行调试.
当我运行PhpStorm时,它会在浏览器中启动Web应用程序,并在浏览器中显示相关的调试参数.
IDE KEY匹配

xdebug.remote_port配置正确.(后来我发现这是错的,但没有错.它应该是9000端口)
但似乎Xdebug从未与PhpStorm沟通.PhpStorm继续监听,执行完全运行而不会在任何断点处停止.

我目前正在尝试为我的node.js应用程序设置一个基本身份验证系统.目前我使用express(3.0.0rc5),passport(0.1.12)和socket.io(0.9.10)与Mongoose作为会话数据存储.我也一直在玩,everyauth但我不喜欢与承诺合作.
现在的情况:
通过护照进行身份验证(Facebook策略)是成功的,session.sid在重定向后在客户端上设置了cookie,我能够在我的数据库中看到会话文档.我可以在访问会话cookie socket.io通过socket.handshake.headers.cookie.
如果我正确理解了护照概念,则在authentication passport.serializeUser调用成功后,我可以向会话添加信息.在我的情况下,最重要的信息是电子邮件,所以我按以下方式设置序列化程序:
passport.serializeUser(function(user, done) {
done(null, user.email);
});
Run Code Online (Sandbox Code Playgroud)
现在,我必须在socket.io事件中仅使用cookie信息从会话中提取电子邮件地址.
var connect = require('connect'),
parseSignedCookie = connect.utils.parseSignedCookie,
cookie = require('express/node_modules/cookie');
io.on('connection', function(socket) {
if(socket.handshake.headers.cookie) {
var cookie = cookie.parse(socket.handshake.headers.cookie);
var sessionID = parseSignedCookie(cookie['connect.sid'], 'secret');
}
});
passport.deserializeUser(function(id, done) {
// so, what is supposed to be done here?
});
Run Code Online (Sandbox Code Playgroud)
因此,如果我没有弄错,现在可以使用任务deserializeUser来访问相应的电子邮件地址.
我该怎么办?任何指针都非常感谢.
我确定我错过了一些非常明显的东西,但我无法弄明白.当提交登录表单时,我传递给LocalStrategy构造函数的函数不会被调用.
码:
var express = require('express');
var http = require('http');
var path = require('path');
var swig = require('swig');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
passport.serializeUser(function(user, done) {
console.log('Serialize user called.');
done(null, user.name);
});
passport.deserializeUser(function(id, done) {
console.log('Deserialize user called.');
return done(null, {name: 'Oliver'});
});
passport.use(new LocalStrategy(
function(username, password, done) {
console.log('local strategy called with: %s', username);
return done(null, {name: username});
}));
var app = express();
app.set('port', process.env.PORT || 3000);
app.set('view engine', 'swig');
app.set('views', __dirname + '/views');
app.use(express.favicon());
app.use(express.logger('dev')); …Run Code Online (Sandbox Code Playgroud) 所以这是我对passport-facebook策略的配置:
passport.use(new FacebookStrategy({
clientID: ".....",
clientSecret: ".....",
callbackURL: "http://localhost:1337/register/facebook/callback",
},
facebookVerificationHandler
));
Run Code Online (Sandbox Code Playgroud)
这是facebookVerificationHandler:
var facebookVerificationHandler = function (accessToken, refreshToken, profile, done) {
process.nextTick(function () {
.......
});
};
Run Code Online (Sandbox Code Playgroud)
有没有办法访问facebookVerificationHandler中的请求对象?
用户通过LocalStrategy注册到我的网站,但随后他们将能够添加他们的社交帐户并将这些帐户与其本地帐户相关联.当调用上面的回调时,当前登录的用户已经在req.user中可用,因此我需要访问req以将用户与facebook帐户相关联.
这是实现它的正确方法还是我应该考虑另一种方法呢?
谢谢.
我理解Passport.js的基本身份验证和摘要身份验证之间的区别,但本地策略与Basic或Digest之间有什么区别?在这三个中,您输入用户名和密码.Basic策略是一种用户和密码身份验证吗?请澄清.
我正在尝试使用PassportJS的多种LOCAL策略.我不是在尝试使用本地,脸谱和Gmail等.我有两组用户存储在不同的对象中,我想使用本地策略对两者进行身份验证.就目前而言,我不能对两者使用相同的本地策略,因为它们具有不同的对象属性,这使我可以查询不同的对象.有没有办法做到这一点?或者对此有任何建议将不胜感激.
这可能是一个noob问题,但我是承诺的新手,并试图找出如何在node.js中使用Q.
我看到教程以a开头
promiseMeSomething()
.then(function (value) {}, function (reason) {});
Run Code Online (Sandbox Code Playgroud)
但是我没有意识到它究竟.then来自哪里.我想它来自
var outputPromise = getInputPromise()
.then(function (input) {}, function (reason) {});
Run Code Online (Sandbox Code Playgroud)
但是哪里getInputPromise()来的?我发现以前没有提到它.
我已将它包含在我的项目中
var Q = require('q');
// this is suppose, the async function I want to use promise for
function async(cb) {
setTimeout(function () {
cb();
}, 5000);
}
async(function () {
console.log('async called back');
});
Run Code Online (Sandbox Code Playgroud)
我如何在我的例子中使用Q它.then?