用javascript创buildlogin代码

我正在开发一个注册系统,用户只需点击button就可以创build一个随机string。

然后,他们可以将此string发送给非用户,以便他/她可以使用它来注册。 新用户插入他/她的select和他/她收到的string的用户名和密码。

为了实现这个场景,我正在寻找一个可以创build一个随机string的javascript函数。 你可以给这个函数提供一个string,并且可以识别它是否创build它 – 会引发一个错误。

任何build立这样的系统的技巧,我在哪里可以find这样的function?

谢谢

编辑

这是一组封闭的后端用户。 我已经是会员了。 我可以创build一个string,并通过电子邮件,Skype,fb聊天,无论发送给我的朋友杰克。 我告诉他,“把你想要的任何用户名/密码,但把我把你的代码发送到registry单的”你的代码“字段,否则系统不会让你注册”。 Jake注册后,string不再有用,因为Jake创build了自己的密码,系统使用该密码进行身份validation。 这是情况。

我坚持使用Javascript,因为我打算使用node.js / express.js,所以我想我所做的任何事情,都必须用Javascript编写。

我想我可以使用像php b-crypt版本的php b-crypt这样的东西,如果存在的话。 或不。 我什至不知道如何开始,所以任何指导方针将是有用的。 谢谢

好的,既然你已经指定了你想要使用快递,这是类似于你的问题的解决scheme。

首先,你需要一种随机的string,这个string可以被创build的函数识别,这是不可能的。 相反,您需要节点应用程序来记住由此函数生成的string。 你可以通过很多方法来解决这个问题,但是这里将介绍这个过程:

  • 你创build一个简单的快速API与几条路线: /产生 ,和/注册

  • 请求/生成 URL在服务器上生成一个随机string,将该string存储在服务器上的活动代码数组中,然后返回该string。

  • / register路由将包含两部分: GETpath将返回一个HTML表单,您的朋友需要填写他的代码(通过电子邮件发送),新用户名和新密码。 POSTpath将把这些数据发送到服务器,并用存储在活动代码数组中的代码检查他的代码。 如果他的代码与数组中的其中一个代码相匹配,这将创build一个用户在HTML表单中input的凭据(否则返回一个错误,如invalid code error )。

  • 最好是,你想创build一个HTML页面来请求/生成的 URL。 这将包括一个button,附加一个函数onclick ,使XMLHttpRequestasynchronous到这个URL。 然后它将返回的代码显示在一个<p>标签(或任何漂浮在你的船上)。

  • 当然,你也需要在/ register路由中创build一个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> 

这应该只是满足您的需求。

请注意:我没有testing任何这个代码,所以不要指望复制+粘贴并使其工作。 这只是作为指导

希望这可以帮助!