サーバー側で作成したJSON Webトークンをクライアントに送信して、クライアントがHTML5ローカルストレージに保存できるようにする方法を探しています。Facebookのログイン後に作成されたJSON Webトークンをクライアントに送信するにはどうすればよいですか?
具体的には、認証のためのパスポートを使用して、NodeJS/ExpressJSで構築された私のアプリケーションは、ユーザーの2種類があります:ローカルユーザーとFacebookのユーザーを。ローカルユーザが自分のユーザ名とパスワードを入力してログインフォームを記入すると
、クライアントは、サーバからの認証を要求し、サーバは、ローカルストレージに格納されているクライアントJWTに送信します。
次に、ユーザーは、データベースからデータを要求するために、トークンを見つけるためにローカル記憶域を調べるウェルカムページにリダイレクトされます。 Facebookのユーザーがログインしたときに
$.ajax({
url: "/protectedEndpoint",
type: 'GET',
dataType: 'json',
beforeSend: function (xhr){
xhr.setRequestHeader('Authorization', localStorage.token);
},
success: function (data) {
...
},
error: function (e) {
alert(e.status + " " + e.statusText + " - " + e.responseText);
}
はしかし、すべてがサーバ側で起こるので、私は、私は、ローカルストレージにJWTを保存することができますかわかりません。ここで
Facebookのパスポート認証のためのサーバ側のコードです:事前に
app.get('/auth/facebook', passport.authenticate('facebook', {scope: ['email']}));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', {session: false, failureRedirect: '/login.html' }),
function (req, res) {
res.redirect('/welcome.html');
});
おかげでたくさん!
あなたが望むページにリダイレクトするだけです(ログインする前にどこに行っても構いません)。 '#token = $ {JWT}'をルートに追加するだけで、クライアントサイドのコードは単に '' window.hash''を探し、それを構文解析してlocalStorageに格納し、 '' window.hash''を空の文字列。 – idbehold
もし私がfacebookのログインしか持っていないのなら、JWTを作るのは役に立たないのですか? –
シングルページアプリケーションがあり、データのやりとりがREST APIを介して行われ、Cookieを使用しない、または使用しない場合、JWTは依然として可能な解決策の1つです。 JWTの使用には、長所と短所の両方があります。サーバー側のレンダリングされたアプリケーションで、とにかくCookieを使用してそこにセッションIDを格納している場合は、ここでJWTを使用する値が表示されません。 –