2017-05-22 13 views
0

passportを使用してWebアプリケーションのAPIを保護しています。リソースにアクセスする前に、ユーザー(oauthクライアントから)が最初にログイン/許可するようにします。Passport - ブラウザで '認証が必要です'ダイアログ

LocalStrategyBasicStrategyの両方を試してみました。その実装はほぼ100%同じです。電子メールでユーザーを探し、パスワードを確認してください。 BasicStrategyを使用すると、ブラウザは「認証が必要です」というメッセージを表示し、ユーザ名&のパスワードを要求します。しかし、LocalStrategyを使用すると、「Unauthorized」と表示され、ログインする機会はありません。

だから私の質問は以下のとおりです。

  1. どのブラウザがログインダイアログを起動することを決定しない、またはそれがBasicStrategyによって行われますか?

  2. 単純なダイアログではなく、UIを使用してログインページを表示することはできますか?

これはOAuthプロセスの一部なので、私は本当にログインページにリダイレクトしたくないことに注意してください。

答えて

0

は、応答ヘッダの後遺症である:

ブラウザは、XMLHttpRequestオブジェクトの私の呼び出しへの応答が401で、応答がWWW認証ヘッダを含むことを検出します。その後、ユーザ名とパスワードを再度尋ねる認証ダイアログが表示されます。

ここは非常に役に立ちますpostです。

スタンドアロンサインインページについては、OAuthプロセスの一部であるため、Expressのredirectを使用する方がよいでしょう。

1

パスポートは認証にのみ使用されます。後でセッションを維持する必要が生じた後、ユーザーがログインしているかどうかを確認します。

したがって、すべてのルートの前にミドルウェアコールを発信できます。 ユーザーがログインしているかどうかをチェックするMiddlleware。

'use strict'; 
var express = require('express'); 

module.exports = { 
    isLoginCheck : function (request, response, next) { 
     if(!request.session.user && request.path != '/login'){ 
     response.redirect('/login'); 
     }else{ 
     next(); 
     } 
}, 

}ルートファイルのインポートミドルウェアで

var express = require('express'), 
indexController = require('./../controller/index'), 
middleware = require('./../middleware/index'), 
passport = require('passport'), 
router = express.Router(); 

router.get('/addUser', indexController.addUser); 
router.post('/saveUser', indexController.saveUser); 
router.use(middleware.isLoginCheck); 
router.get('/', indexController.index); 
router.get('/login', indexController.login); 
router.post('/login', function(request, response, next){ 
passport.authenticate('local', function(err, user, info) { 
    if (err) { 
     return next(err); 
    } 
    if (!user) { 
     var message = "Invalid credentials"; 
     return response.render('login',{message: info.message, userLoggedIn : null}); 
    } 
    request.logIn(user, function(err) { 
     if (err) { return next(err); } 
     request.session.user = request.user; 
     response.redirect('/userList'); 
    }); 
})(request, response, next); 

})。

注:成功した場合、検証済みのユーザーはセッション中に保存されます。これはサーバーが動作するまで続きます。上記ミドルウェアはセッションオブジェクトをチェックしています。認証ダイアログが判明

関連する問題