web-dev-qa-db-ja.com

ユーザーがpassport.jsでログインしているかどうかを知る方法は?

私はpassport.js情報とサンプルを2日間読んでいますが、その後、認証のすべてのプロセスを実行したかどうかはわかりません。

ログインしているかどうか、たとえば、ログインまたはログアウトボタンのあるナビゲーションバーがあるかどうかを確認するには、以下のコードのような変数がありますか?

if (login)
   <button>logout</button>
else 
   <button>login</button>
96
RMontes13

ユーザーがログインしている場合、passport.jsexpress.jsのすべてのリクエストに対してuserreqオブジェクトを作成し、ミドルウェアの存在を確認できます。

if (req.user) {
    // logged in
} else {
    // not logged in
}

そのための簡単なexpress.jsミドルウェアを作成し、ユーザーがログインしているかどうかを確認し、ログインしていない場合は/loginページにリダイレクトします。

function loggedIn(req, res, next) {
    if (req.user) {
        next();
    } else {
        res.redirect('/login');
    }
}

そしてそれを使用します:

app.get('/orders', loggedIn, function(req, res, next) {
    // req.user - will exist
    // load user orders and render them
});
193
moka

コードサンプルが、次のようなミドルウェアを作成できることを示しているように見えるため、テンプレートで使用する場合:

app.use(function (req, res, next) {
  res.locals.login = req.isAuthenticated();
  next();
});

パスポートをセットアップしたら、そのコードをどこかに配置します。

そして、テンプレートで使用します(swigの例)

{% if login %}
<button>logout</button>
{% else %} 
<button>login</button>
{% endif %}
43
cyberwombat

私はそのような解決策を探していて、このページに出会いました。質問は、クライアント側でログイン状態を確認する方法です。

ロギング後、ログインボタンを非表示にし、ログアウトボタンを表示します。ページを更新すると、ログアウトボタンではなくログインボタンが再び表示されます。唯一の解決策は、セッション(JWTを使用している場合はlocalStorage)を使用している場合、sessionStorageにアイテムを保存することです。ログアウトするときにこのアイテムを削除します。次に、すべてのページの読み込みで、このsessionStorageアイテムをチェックし、それに応じて実行します。

if (sessionStorage.getItem('status')) {
    $("#btnlogout").show();
    $("#btnlogin").hide();
// or what ever you want to do
} else {
    $("#btnlogout").hide();
    $("#btnlogin").show();
}



function Login() {
            var data = {
                username: $("#myModal #usr").val(),
                password: $("#myModal #pw").val()

            };
            $.ajax({
                type: 'POST',
                url: '/login',
                contentType: 'application/JSON; charset=utf-8',
                data: JSON.stringify(data),
                success: funcSuccess,
                error: funcFail
            });
            function funcSuccess(res) {
                sessionStorage.setItem('status', 'loggedIn');

                $("#btnlogout").show();
                $("#btnlogin").hide();
            }
            function funcFail() { $("#pp").text('Login Failed'); };
        };

function Logout() {
    $.ajax({
        type: 'GET',
        url: '/logout',
        contentType: 'application/JSON; charset=utf-8',
        success: funcSuccess,
        error: funcFail,
    });
    function funcSuccess(res) {
        $("#btnlogout").hide();
        $("#btnlogin").show();
        sessionStorage.removeItem("status");
    };
    function funcFail() { alert('Login method Failed'); };
}; 
0
Zeni

app.get()またはrouter.get()内で以下のコードを使用します

router.get('/edit/:id', (req, res)=>{
  if(req.isAuthenticated()){
     if(req.isAuthenticated()){
      //

      }
  else{
   res.redirect('/users/login');//your particular login routes
     }
});
0
Pankaj