私はpassport.js
情報とサンプルを2日間読んでいますが、その後、認証のすべてのプロセスを実行したかどうかはわかりません。
ログインしているかどうか、たとえば、ログインまたはログアウトボタンのあるナビゲーションバーがあるかどうかを確認するには、以下のコードのような変数がありますか?
if (login)
<button>logout</button>
else
<button>login</button>
ユーザーがログインしている場合、passport.js
はexpress.js
のすべてのリクエストに対してuser
のreq
オブジェクトを作成し、ミドルウェアの存在を確認できます。
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
});
コードサンプルが、次のようなミドルウェアを作成できることを示しているように見えるため、テンプレートで使用する場合:
app.use(function (req, res, next) {
res.locals.login = req.isAuthenticated();
next();
});
パスポートをセットアップしたら、そのコードをどこかに配置します。
そして、テンプレートで使用します(swigの例)
{% if login %}
<button>logout</button>
{% else %}
<button>login</button>
{% endif %}
私はそのような解決策を探していて、このページに出会いました。質問は、クライアント側でログイン状態を確認する方法です。
ロギング後、ログインボタンを非表示にし、ログアウトボタンを表示します。ページを更新すると、ログアウトボタンではなくログインボタンが再び表示されます。唯一の解決策は、セッション(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'); };
};
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
}
});