天道酬勤,学无止境

Find the Current Session Id in Meteor.js

How do you find the current Session Id on the client?

I am able to get what seems like the last session id, not the current session id.

console.log(Meteor.default_connection._lastSessionId)

评论

The wording for this is a bit confusing, but _lastSessionId is the current session id.

It is only called this because if the client is disconnected and seeks to reconnect it wants to re-establish the session with the last session id.

The client would reconnect with a message like this :

{"msg": "connect ", "session": "ERoZSR3R3f8zBQ6Ry", "version": "pre1","support":["pre1"]}

The session uses the lastSessionId value. This is then used to re-establish the previous connection.

This is the only case where a new session id would be assigned on a reconnection. That or the session is expired off the server.

If the server restarts it's cache is refreshed and it wouldn't recognize the session anymore, and a new session id would be assigned.

The Meteor login token by default is stored in local storage (not in cookie).

On the client you could access

token = Meteor._localStorage.getItem('Meteor.loginToken')

On the server, once token is received, use the Accounts api to hash using

Accounts._hashLoginToken(res.req.body.token)

Then, you could validate hashed value against users collection for services.resume.loginTokens.hashedToken field

This hack can be used to build meteor - express integration

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何访问在Meteor中从Mongo查询的对象的属性(How do you access attributes of an object queried from Mongo in Meteor)
    问题 我对Meteor.js框架中的mongo还是很陌生。 在这里,我已经使用它的ID查询了MongoDB对象。 我正在尝试访问“法力”属性,但它使我返回未定义状态。 var skill = Skills.find({_id:Session.get("selected_skill")}); alert(skill);//This returns me "undefined" Skills.update(Session.get("selected_skill"), {$inc: {mana: 1}}); 您能启发我对mongo中的流星属性访问的要求吗? 谢谢 回答1 find方法返回一个游标,而不是对象或数组。 要访问对象,您需要从游标中获取它 var skill = Skills.find(Session.get('selected_skill')).fetch()[0]; 或直接通过findOne获得它: var skill = Skills.findOne(Session.get('selected_skill')); 然后,您可以像使用其他任何js对象一样使用它: console.log(skill.mana); skill._cache = {cooldown: true}; 请记住,在客户端,像find这样的收集方法是非阻塞的。 它们返回Meteor在缓存中拥有的内容
  • Meteor.js 反应式 html5 地理定位 position.coords(Meteor.js reactive html5 geolocation position.coords)
    问题 我是一个meteor.js nuub,但我确实花了很多时间试图解决这个问题。 我正在尝试根据传递给 getCurrentPosition 的 HTML5 地理定位 API 回调来被动地更新我的 UI。 但是,UI 并未使用我当前的代码进行更新。 你能提供建议和/或解决方案吗? 以下是详细信息: 基础知识:meteor 服务器正在运行,成功地通过集合向/从 mongo 提供其他数据 我有一个主页(main.html): <head> <title>Geolocation</title> </head> <body> <div class="container"> <header class="navbar"> <div class="navbar-inner"> <a class="brand" href="/">Geolocation</a> </div> </header> <div id="locationDemo"> {{> location}} </div> </div> </body> 引用模板(location.js): <template name="location"> <div> Lat: {{lat}} </div> <div> Lon: {{lon}} </div> </template> 具有此关联的帮助程序(location.js): _lat =
  • Meteor JS 在客户端 html 上模拟服务器命令行(Meteor JS simulate server command line on client html)
    问题 我是 Meteor 的新手,想制作一个简单的应用程序。 我无法根据 http://terokaisti.blogspot.com/2012/10/writing-terminal-app-with-meteor-js.html 在服务器端模拟命令行 当我在客户端(Mac OSX Mavericks)输入命令并点击“运行”按钮时,结果只是空白。 我正在使用上面站点中的确切代码,除了我有 autorun 和 exec = Npm.require('child_process').exec; 下面是我的 html 和 js 文件... 终端应用程序.html <head> <title>MeteorJS terminal</title> </head> <body> {{> terminal}} </body> <template name="terminal"> <pre>{{ window }}</pre> <input id="command" type="text" value="{{ last_cmd }}" /> <input type="button" value="Run" /> </template> 终端应用程序 // A collection for stdouts var Replies = new Meteor.Collection('replies')
  • Meteor JS:为特定模板实例存储状态的最佳方式是什么?(Meteor JS: What is the best way to store states for a specific template instance?)
    问题 我正在学习 Meteor JS 中的会话和反应数据源。 它们非常适合设置全局 UI 状态。 但是,我无法弄清楚如何将它们限定到模板的特定实例。 这就是我想要做的 我在一个页面上有多个 contenteditable 元素。 每个下方都有一个“编辑”按钮。 当用户单击“编辑”按钮时,它应该关注元素并显示“保存”和“取消”按钮。 如果用户单击“取消”,则取消任何更改,模板实例应使用原始内容重新呈现。 这是我到目前为止的代码 // Helper Template.form.helpers({ editState: function() { return Session.get("editState"); } }); // Rendered Template.form.rendered = function(e){ var $this = $(this.firstNode); var formField = this.find('.form-field'); if (Session.get("editState")) formField.focus(); }; // Event map Template.form.events({ 'click .edit-btn' : function (e, template) { e.preventDefault(); Session.set(
  • 使用 Meteor.js 抓取(Scraping with Meteor.js)
    问题 我可以用meteor.js刮吗? 刚刚发现cheerio与request相结合,效果很好。 我可以将这些与流星一起使用,还是有类似的东西? 你有一个工作示例吗? 回答1 当然! 很难想象流星是什么做不到的! 首先,您需要一些东西来处理远程 http 请求。 在终端的meteor 目录中,运行meteor add http来添加Meteor.http包,还有npm install cheerio (查看另一个关于如何安装npm 模块的SO 问题,以准确了解安装外部npm 模块的位置。 这是一个可能对您有所帮助的示例,它会抓取当前时间。 服务器端js require = __meteor_bootstrap__.require; //to use npm require must be exposed. var cheerio = require('cheerio'); Meteor.methods({ getTime: function () { result = Meteor.http.get("http://www.timeanddate.com/worldclock/city.html?n=136"); $ = cheerio.load(result.content); CurrentTime = $('#ct').html(); return CurrentTime;
  • Meteor js custom pagination
    I kindly need a support. I have written a pagination following a YouTube tutorial, which works fine with the exception of when going backwards again. It has only 2 buttons, previous and next, when the next button is clicked it works fine but the previous button only go backwards once. Let's say I have 20 records in the collections paginated to display 5 at a time, the next button could go to the end to the fourth page but the previous button would not go pass one step backwards. Please what am I to do to have pagination experience? The previous button is suppose to navigate to the last page as
  • Meteor js 自定义分页(Meteor js custom pagination)
    问题 我需要一个支持。 我在 YouTube 教程之后写了一个分页,它可以正常工作,但再次倒退时除外。 它只有 2 个按钮, previous和next ,当单击下一个按钮时它工作正常,但上一个按钮只向后退一次。 假设我在集合中有 20 条记录,每次分页显示 5 条,下一个按钮可以转到第四页的末尾,但上一个按钮不会向后退一步。 请问我该怎么做才能有分页经验? 只要用户点击,上一个按钮就会导航到最后一页。 分页按钮的事件: Template.myviews.events({ 'click .previous': function () { if (Session.get('skip') > 5 ) { Session.set('skip', Session.get('skip') - 5 ); } }, 'click .next': function () { Session.set('skip', Session.get('skip') + 5 ); } }); 出版: Meteor.publish('userSchools', function (skipCount) { check(skipCount, Number); user = Meteor.users.findOne({ _id: this.userId }); if(user) { if(user.emails[0]
  • Meteor JS simulate server command line on client html
    I am new to Meteor and want to make a simple app. I am failing to simulate the command line on the server side according to http://terokaisti.blogspot.com/2012/10/writing-terminal-app-with-meteor-js.html The result is just blank when on the client side (Mac OSX Mavericks) I type in a command and hit the "Run" button. I am using the exact code from the site above, except that I have autorun and exec = Npm.require('child_process').exec; Below are my html and js files... TerminalApp.html <head> <title>MeteorJS terminal</title> </head> <body> {{> terminal}} </body> <template name="terminal"> <pre>
  • 使用 Meteor.js 检测环境?(Detecting environment with Meteor.js?)
    问题 有人想出使用 Meteor.js 检测托管环境的语法或模式吗? 我已经让 Heroku buildpacks 工作了,并且有一个开发/生产环境,但是对于如何让我的应用程序检测它在哪个环境中运行,我有点空白。 有没有办法让 node.js 检测它在哪个端口上运行? 我希望可能有一些像 app.address().port 这样低级的东西,但这似乎不起作用...... 编辑:这是对我有用的解决方案。 请注意,以下需要在服务器上运行,因此需要将其包含在 server\server.js 或类似文件中。 if (Meteor.is_server) { Meteor.startup(function () { // we want to be able to inspect the root_url, so we know which environment we're in console.log(JSON.stringify(process.env.ROOT_URL)); // in case we want to inspect other process environment variables //console.log(JSON.stringify(process.env)); }); } 还创建了以下内容: Meteor.methods({ getEnvironment
  • Meteor.js和Google Maps(Meteor.js and Google Maps)
    问题 我已经将Maps api包含到我的项目中。 现在,我想在地图上显示一些标记。 我在启动函数中初始化地图: Meteor.startup(function() { ... var mapOptions = { zoom: 8, mapTypeId: google.maps.MapTypeId.ROADMAP }; Map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions); 比我在渲染时设置地图的中心 Template.mapPostsList.rendered = function() { var p2 = Session.get('location'); Map.setCenter(new google.maps.LatLng(p2.lat, p2.lng)); var marker = new google.maps.Marker({ position: new google.maps.LatLng(p2.lat, p2.lng), title:'Meine Position' }); marker.setMap(Map); 到现在为止一切正常。 尽管我有一个PostCollection,其中包含一些适用于我的坐标。 我有一个发布和订阅功能。 现在我想通过地图上的标记显示我的帖子
  • 您将如何使用meteor.js 构建类似pinterest 的页面(how would you build pinterest like page with meteor.js)
    问题 我希望你们都知道 pinterest 样式布局及其行为: 我们收集了许多(比如说 1000 种)产品在页面加载时,我们只显示该系列的一小部分(即 20 个第一批产品) 当用户向下滚动并到达页面底部时,我们会呈现接下来的 20 个产品页面被许多客户查看,每个客户都有自己的一套展示产品 奖励任务: 当产品集合获得新项目时,它们会显示在页面顶部(作为显示产品列表中的第一项) 我正在考虑如何以 Meteor 方式对该逻辑进行编程。 让我们跳过用户界面代码,我只对业务逻辑感兴趣。 我正在考虑将 ProductsDisplayed 集合作为帮助器,它是空的,页面加载时由 20 个产品填充,然后当到达滚动点时,我从原始 Products 集合等中插入 20 个产品。 问题: 如何在客户端之间拥有不同的 ProductsDisplayed 集合, 如何从 Products 集合中查询接下来的 20 个产品,并且不获取之前的 但也许关于 ProductsDisplayed 的整个想法是错误的。 我很想知道你怎么看! 更新! 我改变了只使用 Products 集合的方法。 服务器: Meteor.publish "productsDisplayed", (number) -> Products.find {}, limit: number 客户: Meteor.autosubscribe ->
  • Meteor.js - 在多个集合上进行用户搜索的方法(Meteor.js - ways to do user search over multiple collections)
    问题 关于如何在我的 Meteor 应用程序中设置集合,我有点进退两难。 用户搜索栏是我的应用程序的核心部分,用户需要能够输入一个搜索并在多个不同的集合中获得结果: user query : 'foo' var query = 'foo'; var actors_results = Actors.find({ $or : [{ name : query}, { actor_biography : query }] ); var films_results = Films.find({ $or : [{ name : query}, { description : query }] ); var cinemas_results = Cinemas.find({ $or : [{ name : query}, { genres : query }] ); 对于搜索结果显示,这不好 - 我不认为 (???) 我可以将这些光标组合成一个光标,因此分页等简单的事情几乎不可能做到(或者我不知道该怎么做) )。 我知道的唯一解决方案是制作一个 SuperCollection,我将所有文档放在其中,并有一个字段“类型”,可以是“演员”、“电影”或“电影”,然后分页等变得容易。 但在我看来,这确实使其他一切变得复杂……数据库的结构不再反映数据。 Actors 和 Cinemas 在数据
  • meteor.js 和 mongoDB - 查询多个字段(meteor.js & mongoDB - query with multiple fields)
    问题 语境 我正在尝试创建一个搜索功能,允许用户填写多个字段、提交并查看一个集合中匹配项目的列表。 我使用前端的表单执行此操作,该表单更新后端的会话变量,然后将其作为查询传递给 mongodb 集合。 它应该如何工作 如果用户提交场地大小,则显示该大小的场地。 如果仅输入位置,则显示该位置内的场地。 如果同时提交了大小和位置,则会显示符合这两个条件的场地。 它是如何工作的 如果未填写任何内容,则按搜索会生成集合中的所有项目。 提交位置和大小会产生符合这两个标准的场地。 但是,只填写一个字段而将另一个字段留空不会产生任何结果。 我想知道为什么会这样 - 这几乎就像查询正在搜索一个字面上包含 ''... 非常感谢帮助! 代码片段 //Search Form Helper Template.managevenues.helpers({ venue: function () { var venueNameVar = Session.get('venueNameVar'); var venueLocationVar = Session.get('venueLocationVar'); if(venueNameVar || venueLocationVar){ console.log(venueNameVar); console.log(venueLocationVar); return
  • 如何使用 Meteor js 触发自定义事件(How to trigger a custom event with Meteor js)
    问题 是否可以使用 Meteor 触发自定义事件? 我看到触发自定义 jquery 事件不起作用,因为 Meteor 事件与 jQuery 是分开的(如这里所讨论的)。 所以如果我有类似的东西: Template.foo.events({ 'mouseenter .box, makeSelected .box': function() { ... } }) 如果我能做一些类似的事情,那就太好了: Meteor.trigger($('.box')[0], 'makeSelected') 我目前的解决方法是将我想要的 id 作为data-id="{{_id}}"在 dom 元素上,然后使用它来修改 Session 中的一个键,但是能够触发事件感觉更“干燥的”。 回答1 Meteor 目前似乎不支持自定义事件,但您始终可以使用 jQuery(或任何您想要的)来创建自定义事件,然后确保它们重新附加到它们各自的元素,并且rendered事件打开模板: Template.foo.rendered = function() { attachEvents(); } 回答2 显然,这现在使用 jQuery 事件触发和标准 Meteor 事件侦听语法起作用。 查看 Bootstrap 轮播的代码,它通过执行以下操作发出自定义 jQuery 事件: var slideEvent = $.Event(
  • How to trigger a custom event with Meteor js
    Is it possible to trigger a custom event with Meteor? I see that triggering custom jquery events doesn't work, since the Meteor events are separate from jQuery (as discussed here). So if I had something like: Template.foo.events({ 'mouseenter .box, makeSelected .box': function() { ... } }) It'd be nice if I could do something along the lines of: Meteor.trigger($('.box')[0], 'makeSelected') My current workaround is to just store the id that I want as data-id="{{_id}}" on the dom element and then use that to modify a key in the Session, but being able to trigger the event feels more "DRY".
  • 如何将数据从服务器推送到所有不使用集合的客户端?(How to push data from server to all clients not using Collections?)
    问题 我需要通知客户有关服务器端的变化。 在我的情况下,我在服务器和客户端上使用不同的集合(在这个问题中有更多关于它的信息:你将如何使用meteor.js 构建类似 pinterest 的页面)。 在服务器上,我从外部 API 获取新产品。 我想向所有客户发布新项目的数量,他们可以更新布局所需的局部变量以使其正常工作。 怎么做? 如果我可以发布/订阅 Meteor.Collection 以外的其他类型的数据,那就太好了。 我找到了 Meteor.deps,但据我所知,它只适用于客户端。 回答1 为了完成你想要的,你需要另一个集合——在客户端上。 在服务器上,在发布功能中,从头开始构建文档,将产品的当前计数分配给属性。 使用observe() 和set,在产品中添加或删除文档时修改count 。 在客户端订阅count “记录集”。 // Server Meteor.publish('count', function () { // Build a document from scratch var self = this; var uuid = Meteor.uuid(); var count = Products.find().count(); // Assign initial Products count to document attribute self.set(
  • Meteor.js - 暂时阻止模板重新渲染(禁用反应性)(Meteor.js - temporarily prevent a template from re-rendering (disable reactivity))
    问题 我的应用程序中有一个页面,其中包含用户正在处理的项目列表。 当他们想要添加一个新项目时,我会显示一个模态表单来获取项目名称。 如果他们单击“确定”,我将创建项目并使用 Meteor.Router 重定向到 /project/[new project id]。 但是,就在重定向之前,我会自动将新项目名称添加到用户的项目列表中。 我想避免这种不必要的重新渲染,这会导致更新内容的短暂闪烁。 有没有办法防止我的项目列表的模板重新渲染? 回答1 您可以将包含此内容的 html 放入{{#constant}}块中。 关于常量的文档 例如 {{#constant}} {{#each ...}} .... {{/each}} {{/constant}} 另一种选择是禁用模板助手中的反应性,例如,如果您有 Template.home.mydata = function() { return MyCollection.find() } 将此更改为使用reactive:false作为选项 Template.home.mydata = function() { return MyCollection.find({}, {reactive:false}) } 这样会显示初始更改,但不会使用任何更新,因此不会重新渲染。 回答2 我发现在调用方法后在事件处理程序中使用取消会取消反应链。 Template
  • 在 Meteor.js 中,为什么 this.userId == 未定义?(In Meteor.js, Why is this.userId == undefined?)
    问题 我正在通过一本书学习 Meteor,现在我们想要insert()当前登录的用户的userId 。 Template.categories.events({ 'keyup #add-category': function(e, t) { if(e.which == 13) { var catVal = String(e.target.value || ""); if(catVal) { lists.insert({Category: catVal, owner: this.userId}); console.log(this.userId); Session.set('adding_category',false); } } }, 然而this.userId是未定义的,所以insert()没有按预期工作。 让这个工作缺少什么? 不知何故,它在下面的代码中起作用(定义了userId ): lists.allow({ insert: function(userId, doc) { return adminUser(userId); }, update: function(userId, docs, fields, modifier) { return adminUser(userId); }, remove: function(userId, docs) { return
  • 拿起meteor.js 用户注销(Picking up meteor.js user logout)
    问题 当用户退出网站时,有什么办法可以接听吗? 当他们这样做时,我需要做一些清理工作。 使用内置的meteor.js 用户帐户。 我将使用它进行一些验证,所以我需要一个不能代表客户端其他用户触发的解决方案 - 最好是完全服务器端的东西。 回答1 您可以使用 Deps.autorun 来设置自定义处理程序,观察 Meteor.userId() 反应变量的变化。 Meteor.userId()(和 Meteor.user())是反应变量,分别返回当前登录的 userId(如果没有则为 null)和 Meteor.users 集合中相应的用户文档(记录)。 因此,人们可以通过对这些反应性数据源的修改做出反应来跟踪 Meteor 应用程序的登录/退出。 客户端/main.js : var lastUser=null; Meteor.startup(function(){ Deps.autorun(function(){ var userId=Meteor.userId(); if(userId){ console.log(userId+" connected"); // do something with Meteor.user() } else if(lastUser){ console.log(lastUser._id+" disconnected"); // can't use
  • Meteor.js:获得匿名访问者唯一的ID / ip /什么?(Meteor.js: Get anonymous visitors unique ID/ip/whatever?)
    问题 假设我正在使用meteor.js构建应用程序,我只是从用户那里收集一些简单的表单数据。 也许是一个简单问题的答案或其他东西。 他们不需要登录即可提交数据。 我该如何保护我的应用程序,防止有人在他们的Chrome控制台中创建一个仅将废话插入数据库的js循环? 我可以通过执行以下操作来保护删除和更新: Formanswers.allow({ insert: function () { return true; }, update: function () { return false; }, remove: function () { return false; }, }); 如果用户已登录(您记得我的应用程序中不是这种情况),我可以为每个插入插入时间戳并检查类似以下内容: insert: function (userId, doc) { if (userId && (Formanswers.findOnd({userid: userId, time: SOMETHING TIME SPECIFIC}).count() < 1)) return true; }, 所以我的问题是:是否还有其他方法可以为匿名(未登录)用户获得唯一的userId或IP地址或其他东西,以便我也可以对他进行上述检查? 谢谢! 回答1 您可以使用陨石包。 匿名帐户 https://github.com