使用javascript创建登录代码
我正在开发一个注册系统,用户只需点击一个按钮就可以创建一个随机字符串 然后,他们可以将该字符串发送给非用户,以便他/她可以使用该字符串进行注册。新用户插入他/她的选择的用户名和密码以及他/她收到的字符串 为了实现这个场景,我正在寻找一个可以创建随机字符串的javascript函数。您可以向函数提供字符串,并可以识别它是否创建了该字符串-抛出错误 创建这样一个系统有什么建议吗?在哪里可以找到这样的功能 谢谢 编辑 这是一个封闭的后端用户组。我已经是会员了。我可以创建一个字符串并通过电子邮件、skype、fb聊天等方式发送给我的朋友Jake。我告诉他,“输入你想要的用户名/密码,但将我发送给你的代码输入到注册表单的‘你的代码’字段,否则系统将不允许你注册”。Jake注册后,字符串不再有用,因为Jake创建了自己的密码,系统使用该密码进行识别。 情况就是这样 我坚持使用Javascript,因为我要使用node.js/express.js,所以我想无论我做什么,它都必须用Javascript编写 如果存在的话,我想我可以使用类似于使用javascript创建登录代码,javascript,node.js,function,express,Javascript,Node.js,Function,Express,我正在开发一个注册系统,用户只需点击一个按钮就可以创建一个随机字符串 然后,他们可以将该字符串发送给非用户,以便他/她可以使用该字符串进行注册。新用户插入他/她的选择的用户名和密码以及他/她收到的字符串 为了实现这个场景,我正在寻找一个可以创建随机字符串的javascript函数。您可以向函数提供字符串,并可以识别它是否创建了该字符串-抛出错误 创建这样一个系统有什么建议吗?在哪里可以找到这样的功能 谢谢 编辑 这是一个封闭的后端用户组。我已经是会员了。我可以创建一个字符串并通过电子邮件、sky
phpb-crypt
的javascript版本。或者不是。我甚至不知道如何开始,所以任何指导方针都是有用的。
谢谢好的,既然您已经指定要使用express,这里有一些类似于解决问题的方法 首先,您需要一种生成随机字符串的方法,该字符串可以由创建它的函数识别,这是不可能的。相反,您需要节点应用程序记住此函数生成的字符串。你可以通过多种方式来实现这一点,但以下是我将概述的过程:
- 您可以创建一个简单的express API,其中包含两个路由:/generate和/register
- 请求/generate URL会在服务器上生成一个随机字符串,将该字符串存储在服务器上的活动代码数组中,然后返回该字符串
- /register路径将有两部分:GET路径将返回一个HTML表单,您的朋友必须用他的代码(您已通过电子邮件发送)、新用户名和新密码填写该表单。POST路径会将此数据发送到服务器,并用活动代码数组中存储的代码检查他的代码。如果他的代码与数组中的一个代码匹配,则会创建一个用户,该用户使用他们在HTML表单中输入的凭据(否则会返回一个错误,类似于
)无效代码错误
- 您最好创建一个HTML页面来请求/generateURL。这将包括一个按钮,该按钮附加一个函数
,该函数使onclick
异步到此URL。然后,它将返回的代码显示在XMLHttpRequest
标记中(或任何漂浮在船上的标记) - 当然,您还需要在/register路径上创建一个HTML表单,以便朋友使用您通过电子邮件发送的代码注册他的新帐户
- 您需要某种数据库来存储用户凭据。它可以是简单的.json文件,也可以是更复杂的NOSQL数据库。我不会详细介绍实现这一点,但是无论您使用哪一种实现,都有很多优秀的资源
var activeKeys = [];
router.get("/", function(req, res) {
var options = {
root: __dirname + '/public/',
dotfiles: 'deny',
headers: {
'sent-timestamp': Date.now()
}
};
res.sendFile("index.html", options, function (err) {
if (err) {
console.log(err);
res.status(err.status).end();
}
else {
return;
}
});
});
router.get("/generate", function(req, res) {
require('crypto').randomBytes(48, function(ex, buf) {
var token = buf.toString('hex');
activeKeys.push(token);
res.send(token);
return;
});
});
router.get("/register", function(req, res) {
var options = {
root: __dirname + '/public/',
dotfiles: 'deny',
headers: {
'sent-timestamp': Date.now()
}
};
res.sendFile("register.html", options, function (err) {
if (err) {
console.log(err);
res.status(err.status).end();
}
else {
return;
}
});
});
router.post("/register", function(req, res) {
var validKey = keys.indexOf(req.body.code);
if (validKey < 0) {
res.send("invalid code error");
}
else {
//here you would implement adding your newly created user to the database,
//and then sending a success response
}
});
var-activeKeys=[];
路由器.get(“/”,函数(req,res){
变量选项={
根目录:_dirname+'/public/',
dotfiles:“拒绝”,
标题:{
“已发送时间戳”:Date.now()
}
};
res.sendFile(“index.html”、选项、函数(err){
如果(错误){
控制台日志(err);
res.status(err.status).end();
}
否则{
返回;
}
});
});
路由器.get(“/generate”,函数(req,res){
require('crypto')。随机字节(48,函数(ex,buf){
var token=buf.toString('hex');
activeKeys.push(令牌);
res.send(令牌);
返回;
});
});
路由器.get(“/寄存器”,函数(req,res){
变量选项={
根目录:_dirname+'/public/',
dotfiles:“拒绝”,
标题:{
“已发送时间戳”:Date.now()
}
};
res.sendFile(“register.html”、选项、函数(err){
如果(错误){
控制台日志(err);
res.status(err.status).end();
}
否则{
返回;
}
});
});
路由器post(“/寄存器”,功能(req,res){
var validKey=keys.indexOf(请求主体代码);
如果(有效期<0){
res.send(“无效代码错误”);
}
否则{
//在这里,您将实现将新创建的用户添加到数据库,
//然后发送成功响应
}
});
public/index.html-默认路由,用户
<button id="generate">Generate Key</button>
<p>Mail this to your friend!</p><p id="key"></p>
<script>
document.getElementById("generate").addEventListener("click", function(e) {
var xhr = new XMLHttpRequest();
xhr.addEventListener("load", function() {
document.getElementById("key").innerHTML(this.responseText);
});
xhr.open("GET", "http://www.example.com/generate", true);
xhr.send();
});
</script>
生成密钥
把这个寄给你的朋友
document.getElementById(“生成”).addEventListener(“单击”,函数(e){
var xhr=new XMLHttpRequest();
addEventListener(“加载”,函数(){
document.getElementById(“key”).innerHTML(this.responseText);
});
xhr.open(“GET”http://www.example.com/generate“,对);
xhr.send();
});
public/register.html-您的朋友在这里注册了他的新帐户
<form method="post" action="/generate">
<input placeholder="your code" name="code" type="text"></input>
<input placeholder="username" name="username" type="text"></input>
<input placeholder="password" name="password" type="password"></input>
<input placeholder="confirm" name="confirm" type="password"></input>
</form>
那应该正好适合你的需要
请注意:我还没有测试过这段代码,所以不要指望复制+粘贴就能正常工作。这只是一个指南
希望这有帮助