我正在为一家小公司开展实习文件共享项目。我想用流星做这件事。我很常见的是html / javascript而不是数据库。 我的问题是处理用户。由于我在这里的研究,我不确定是否已经可以在客户端创建用户。官方文档显示了一些如何处理用户的方法,但没有示例。 我尝试在服务器端创建一个列表,如下所示:
Users = new Meteor.Collection("users");
然后我想在启动时插入一个用户:
//on Client side
if (Meteor.isClient) {
var username = "My Name";
Meteor.call("create_user", username, function(error, user_id) {
Session.set("user_id", user_id);
});
}
//on Server side
if(Meteor.is_server) {
Meteor.methods({
create_user: function(username) {
console.log("CREATING USER");
var USER_id = Users.insert({name: username});
return user_id;
},
});
}
但是在html模板中读取用户名不起作用......
是否有注册和登录的好例子?
干杯
答案 0 :(得分:7)
在Meteor中添加帐户功能非常简单..可能是简单的电子邮件,密码,或者使用facebook connect / twitter等。
执行以下操作以获取设置了用户帐户的简单流星应用程序..
meteor create simpleapp
cd simpleapp
添加accounts-ui和accounts-password包
meteor add accounts-ui
meteor add accounts-password
您只需添加其他帐户相关软件包即可实现facebook / twitter / github / google登录等
列出其他可用的meteor包使用此命令
meteor list
现在将您的simpleapp.html文件编辑为此以添加登录按钮等。
<head>
<title>simpleapp</title>
</head>
<body>
{{> hello}}
</body>
<template name="hello">
<h1>Hello World!</h1>
{{greeting}}
<input type="button" value="Click" />
{{loginButtons}}
</template>
我只是将{{loginButtons}}
添加到默认的html文件中以添加默认登录按钮..
现在运行meteor app并转到localhost:3000
meteor
您实现了登录功能,但没有做太多工作。 4-5行代码,甚至可以处理忘记密码,注册新用户等事项
接下来是您需要在用户登录时显示特定的html。
您可以使用{{currentUser}}
全局
你相应地实现它
<template name="hello">
<h1>Hello World!</h1>
{{greeting}}
<input type="button" value="Click" />
{{loginButtons}}
{{#if currentUser}}
{{> loggedInTemplate}}
{{else}}
{{> loggedOutTemplate}}
{{/if}}
</template>
<template name="loggedInTemplate">
<!-- user is logged in -->
</template>
<template name="loggedOutTemplate">
<!-- user is logged out -->
</template>
答案 1 :(得分:1)
您无需手动创建用户系统。只需使用accounts package:
即可Meteor Accounts系统建立在发布和方法的userId支持之上。核心软件包添加了存储在数据库中的用户文档的概念,其他软件包添加了安全密码认证,与第三方登录服务的集成以及预构建的用户界面。
但是你的代码应该可行。但是你没有将用户名属性暴露给客户端,所以也许这就是你无法在模板中看到它的原因。
答案 2 :(得分:0)
好的,谢谢你,这很容易。但所以我无法修改loggedInTemplate或loggedOutTemplate。
我告诉你我有什么:
//the html
<head>
<title>myApp | documents</title>
</head>
<body>
<div id="headerBox">
{{> header}}
</div>
<div id="sideBox">
{{> side}}
</div>
<div id="contentsBox">
{{> contents}}
</div>
</body>
<template name="header">
<h1>Company name</h1>
</template>
<template name="contents">
{{#if currentUser}}
<p>Welcome to documents</p>
{{else}}
<h3>Hello! Please log in!</h3>
<p><input type="text" id="username" placeholder="Username"><input type="text" id="password" placeholder="Password"><input type="button" value="log me in!"></p>
{{/if}}
</template>
<template name="side">
<p>Hello {{ activeUser }}</p>
<p><input type="button" value="Create New Document" onclick="createPage()"></p>
<h3>Documents:</h3>
</template>
和
//client.js
Pages = new Meteor.Collection("pages");
Meteor.startup(function() {
Session.set("activeUser", "please log in!");
});
Template.side.activeUser = function() {
return Session.get("activeUser");
};
和
//server.js
Meteor.startup(function() {
Accounts.createUser({username: "MyName", email: "me@example.com", password: "123456"});
});
我正在寻找一种手动方式来记录在启动时创建的这个用户。当然后来允许这个用户创建新用户......
问题是添加
// Returns an event_map key for attaching "ok/cancel" events to
// a text input (given by selector)
var okcancel_events = function (selector) {
return 'keyup '+selector+', keydown '+selector+', focusout '+selector;
};
// Creates an event handler for interpreting "escape", "return", and "blur"
// on a text field and calling "ok" or "cancel" callbacks.
var make_okcancel_handler = function (options) {
var ok = options.ok || function () {};
var cancel = options.cancel || function () {};
return function (evt) {
if (evt.type === "keydown" && evt.which === 27) {
// escape = cancel
cancel.call(this, evt);
} else if (evt.type === "keyup" && evt.which === 13) {
// blur/return/enter = ok/submit if non-empty
var value = String(evt.target.value || "");
if (value)
ok.call(this, value, evt);
else
cancel.call(this, evt);
}
};
};
Template.contents.events = {};
Template.contents.events[okcancel_events('#password')] = make_okcancel_handler({
ok: function (text, event){
var usernameEntry = document.getElementById('username');
var passwordEntry = document.getElementById('password');
Meteor.loginWithPassword({usernameEntry, passwordEntry});
event.target.value = "";
}
});
到客户端不起作用......