node.jsでログイン認証を実装する方法
質問
私はこのノードサーバを実行しています。
var server=http.createServer(function(request, responsehttp) {
if (request.method == 'POST') {
var body = '';
request.on('data', function (data) {
body += data;
});
request.on('end', function () {
var POST = qs.parse(body);
processquery(POST, request, responsehttp);
});
} else {
var url_parts = url.parse(request.url, true);
var query = url_parts.query;
console.log(query);
processquery(query, request, responsehttp);
}
});
私はこのサーバーのためにログインフォームを追加したい。そうすれば、ユーザーが認証されたときにそれが表示されます。
function processquery(query, request, responsehttp){
var returnResult = function (data){
responsehttp.end(JSON.stringify(data));
};
if (!query.command) {
fileprocess(request, responsehttp);
}
responsehttp.writeHead(200, {"Content-Type": "application/json"});
switch(query.command) {
case 'logout':
logout(query, returnResult);
break;
case 'login':
login(query, returnResult);
break;
}
}
プロセスクエリ関数では、コマンドが与えられていない場合、クライアントにファイルを返します。 私はクライアントからサーバーにログインコマンドを送信することができますので、しかし、それはユーザー名とパスワードを持つログインコマンドを受信したとき、サーバーは何をすべきか、それはどのようにログイン要求を処理し、ログインの成功または失敗を返す必要があります、私はこの部分を書くために助けを必要とする。
私が試したこと。
function login(request, callback) {
if(request.username==users[request.username] && request.password==users[request.username].password) {
users[request.username].auth=true;
var data = {result:'success','message':'login successful'};
callback(data);
} else {
var data = {result:'error','message':'login incorrect'};
callback(data);
}
}
ログイン関数にrequest変数を追加し、request.session変数を設定しようとしましたが、request.sessionが未定義であると言われました。
どのように私はすべてのユーザーに対して適切にログイン認証を維持することができ、このログインモジュールを書くことができます示唆してください。
どのように解決するのですか?
以下は、私が Express.js :
1) ユーザが認証されているかどうかを確認する : 私はCheckAuthという名前のミドルウェア関数を持っており、ユーザが認証される必要があるすべてのルートで使用しています。
function checkAuth(req, res, next) {
if (!req.session.user_id) {
res.send('You are not authorized to view this page');
} else {
next();
}
}
この関数はこんな感じでルートに使っています。
app.get('/my_secret_page', checkAuth, function (req, res) {
res.send('if you are viewing this page it means you are logged in');
});
2) ログインルートです。
app.post('/login', function (req, res) {
var post = req.body;
if (post.user === 'john' && post.password === 'johnspassword') {
req.session.user_id = johns_user_id_here;
res.redirect('/my_secret_page');
} else {
res.send('Bad user/pass');
}
});
3) ログアウトのルートです。
app.get('/logout', function (req, res) {
delete req.session.user_id;
res.redirect('/login');
});
Express.jsについてもっと知りたい方は、こちらのサイトをご覧ください。 expressjs.com/ja/guide/routing.html もっと複雑なことが必要な場合は、次のサイトを参照してください。 あらゆる認証 (これはfacebookやtwitterなど、多くの認証メソッドを備えています。 ここで ).
関連
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsを完全にアンインストールして、最初から再インストールする方法 (Mac OS X)
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み] Node.jsのnpmモジュールをアンインストールするにはどうすればよいですか?
-
[解決済み] ステートレス(=セッションレス)認証の場合、CSRFトークンは必要ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] smbclient NT_STATUS_ACCESS_DENIED
-
[解決済み] LDAPサーバをベースDNとする。
-
[解決済み】node.jsのユーザー認証ライブラリは?
-
[解決済み】エンドポイントとは何ですか?
-
[解決済み] ステートレス(=セッションレス)認証の場合、CSRFトークンは必要ですか?
-
[解決済み] OpenIDとOAuthの比較 [重複]について
-
[解決済み] Socket.IO 認証
-
[解決済み] EveryauthとPassport.jsの違い?
-
[解決済み] AWS CognitoのJWTをAPIバックエンドで確認する方法とは?
-
[解決済み] OpenIDプロバイダーのURLの一覧はどこにありますか?[クローズド]