我正在开发一个注册系统,用户只需按一下按钮即可创建一个随机字符串。
然后他们可以将此字符串发送给非用户,以便他/她可以使用它来注册。新用户插入他/她选择的用户名和密码以及他/她收到的字符串。
为了实现这个场景,我正在寻找一个可以创建随机字符串的javascript函数。您可以将一个字符串提供给该函数,并且可以识别它是否创建它 - 引发错误。
有关创建此类系统的任何提示,我在哪里可以找到这样的功能?
由于
修改
这是一组封闭的后端用户。我已经是会员了。我可以通过电子邮件,Skype,fb聊天等方式创建一个字符串并发送给我的朋友杰克。我告诉他,"输入你想要的任何用户名/密码,但把我发送给你的代码放到你的代码中#39;注册表单的字段,否则系统不会让你注册"。 Jake注册后,字符串不再有用,因为Jake创建了自己的密码,系统使用该密码进行识别。 这就是场景。
我坚持使用Javascript,因为我将使用node.js / express.js,所以无论我做什么,它都必须用Javascript编写。
我想我可以使用php b-crypt
的javascript版本,如果存在的话。或不。我甚至不知道如何开始,所以任何指南都会有用。
感谢
答案 0 :(得分:2)
好的,既然您已经指定了您想使用快递,那么这就是解决问题的方法。
首先,您想要一种生成随机字符串的方法,该字符串可以由创建它的函数识别 - 这是不可能的。相反,您需要节点应用程序来记住此函数生成的字符串。你可以通过多种方式解决这个问题,但这里是我要概述的过程:
您可以使用以下几个路径创建一个简单的快速API: / generate 和 / register 。
请求 / generate URL在服务器上生成随机字符串,将该字符串存储在服务器上的活动代码数组中,然后返回该字符串。
/ register 路由将包含两部分: GET 路径将返回一个HTML表单,您的朋友必须填写他的代码(其中你已经通过电子邮件发送了),他的新用户名和他的新密码。 POST 路径会将此数据发送到服务器,并使用存储在活动代码数组中的代码检查其代码。如果他的代码与数组中的某个代码匹配,则会为用户创建他们在HTML表单中输入的凭据(否则会返回错误,如invalid code error
)。
您最好想要创建一个HTML页面来请求 / generate 网址。这将包含一个附加函数onclick
的按钮,该函数使XMLHttpRequest
与此URL异步。然后它会在<p>
标签中显示返回的代码(或任何漂浮在你船上的代码)。
当然,您还需要在 / register 路线上创建HTML表单,以便朋友使用您通过电子邮件发送的代码注册其新帐户。
您需要某种数据库来存储您的用户凭据。它可能像.json文件一样简单,也可能是更复杂的NOSQL数据库。我不会详细介绍实现这个的细节,但是无论你采用哪种实现方式,都会有很多很好的资源。
以下是您编写的代码的基本概要:
routes / index.js - 这将在您的快递应用中
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
}
});
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>
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>
这应该只是满足你的需求。
请注意:我还没有测试过这些代码,所以不要复制+粘贴并让它工作。这仅作为指南
希望这有帮助!