2

Node.js現在、とを使用してWebアプリを構築していExpress.jsます。

メインファイルでユーザー名とパスワードを使用して単純なサーバー側認証を行う方法を探しています。メインファイルは次の場所でリクエストをapp.jsリッスンしています。posthttp://www.domain.com/login

app.js

app.post('/login', function(req, res) {
  // some server-side code for a username and password
}

クライアント側には、ユーザー名とパスワードを使用した簡単なログインフォームがあります。このフォームはサーバーに投稿されます。

index.html

<form method="post" action="/login">
<input type="text" id="user" name="user" />
<input type="password" id="pass" name="pass" />
<button type="submit">Login</button>
</form>

プラグインを使用せずにこれを実現したいと考えています。ExpressJS

編集:私の質問は、ExpressJSとNodeJSで簡単なユーザー名とパスワードの認証をどのように達成するのですか?

4

3 に答える 3

9

ExpressJSセッションを使用すると、セッションCookieを保持できます。cookieParserとセッションストアが必要です。ただし、このExpressJS機能を拡張したくない場合(これは私がメッセージから理解していることです)、トークンまたは秘密の一時文字列を使用して独自のセッションを管理する必要があります。

ExpressJSセッションを使用することを強くお勧めしますが、これはExpressJSCookieなしで使用する方法です。

  • ログインするたびに、一意のトークンを作成し、後で検索できるように保存します。
  • リクエストごとに、クライアントからそのトークンを送信し、サーバーで確認します。トークンが無効な場合は、ログインにリダイレクトします

ログインコードの例は次のとおりです。

app.post("/login", function(req, res) {
    if(req.body.username && req.body.password) {
        // check username and password
        if(authenticated) {
            // create a token and store it with the current date (if you want it to expire)
            var token = generateAndStoreRandomString(req.body.username);
            res.redirect("http://your.domain/path?token=" + token);
            return;
        }
        // Do something if username or password wrong
    }
    // Do something if no username or password
});

今、すべての要求で:

app.get("somePath", function(req, res) {
    if(!req.query.token) {
        res.redirect("http://your.domain/login");
        return;
    }
    // Check token in database, if it exists and it hasn't expired
    if(!authenticated) {
        res.redirect("http://your.domain/login");
        return;
    }
    // The user is authenticated. Do the actions required by "somePath"
});

期限切れのトークンは最終的には合計されるため、プロセスで時々クリーンアップするようにしてください。ExpressJS cookieParserとセッションストアを使用したい場合は、たくさんの記事と例があります。それらに問題がある場合は、別の質問を投稿してください。

繰り返しますが、ExpressJSセッションを使用してみてください。httpsの代わりにhttpを使用すると、このメソッドは簡単に乗っ取られる可能性があります。

于 2012-12-26T10:17:10.647 に答える
4

とても簡単です。ExpressJSは、Node.js内の基本的なhttpサーバー上に構築され、ノードモジュールである接続する非常に小さなフレームワークです。

認証システムを作成するには、セッションを使用します。まず、次の行を呼び出す必要があります。

app.use(express.cookieSession());

req.sessionその後、を使用してセッションを保存およびロードできるようになります。

app.post('/login', function(req, res) {
    if (req.session.username & req.session.password != null) {
       // Already logged in.
    } else {
       var q = db.query("SELECT * FROM `users` WHERE `username`='" + req.params.username + "' AND `password`='" + req.params.password + "'");

       if (q) {
          // Set the sessions.
          req.session.username = req.params.username;
          req.session.password = req.params.password;
       }
    }
});

基本的な例。入力をサニタイズして保護する必要がありますが、開始する必要があります。

于 2012-12-26T03:09:09.123 に答える
2

Connectに含まれているミドルウェアを使用して探していた答えを見つけました。CookieExpressJSを使用したり、別のノードモジュールを追加したりする必要はありません。

var express = require('express');

function authorize(username, password) {
    return 'someone' === username & 'password' === password;
}

var app = express.createServer(
    express.basicAuth(authorize)
);

app.get('/', function(request, response) {
    response.send('Authorized!');
});

console.log('Starting server...')
app.listen(8080);

アプリケーションを実行してに移動するhttp://localhost:8080と、ユーザー名とパスワードの入力を求められます。シンプル。

于 2012-12-26T12:39:46.143 に答える