2017-07-09 14 views
1

こんにちは初心者からNodejsまでpassportjsトークンベースの認証を使用しました。ユーザーがログインするとトークンを提供します。たとえば、ユーザーが登録ユーザーのリストを表示する場合は、ユーザーがトークン値を持っている場合に表示できます。今それは私に郵便配達で完全にトークンの値を提供しますが、私は変数にそれを格納し、FRONT-END経由で呼び出す方法を知らない。私はフロントエンド(それは彼がユーザーを取得ボタンをクリックした場合)それはユーザーのリストを表示する必要があります。私はPOSTMANでそれは細かく動作している私はフロントエンド経由でそれを行う方法がありません。 私のユーザーコード(ログイン/ログアウト)トークンの値をローカルのjavascriptファイルに保存するにはどうすればいいですか

var express = require('express'); 
var router = express.Router(); 
var User = require('../models/user'); 
var passport = require('passport'); 
var Verify = require('./verify'); 
/* GET users listing. */ 
router.route('/') 
.get(Verify.verifyOrdinaryUser, function(req, res, next) { 
    User.find({}, function (err, users) { 
      if (err) throw err; 
      res.json(users); 
     }); 
}); 
router.post('/register', function(req, res, next) { 
    User.register(new User({ username : req.body.username }),req.body.password, function(err, user) { 
     if (err) { 
      return res.status(500).json({err: err}); 
     } 
     user.save(function(err,user) { 
      passport.authenticate('local')(req, res, function() { 
       return res.status(200).json({status: 'Registration Successful!'}); 
      }); 
     }); 
    }); 
}); 
router.post('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
     if (err) { 
      return next(err); 
     } 
     if (!user) { 
      return res.status(401).json({ 
       err: info 
      }); 
     } 
     req.logIn(user, function(err) { 
      if (err) { 
       return res.status(500).json({ 
        err: 'Could not log in user' 
       }); 
      } 
      var token = Verify.getToken(user); 
      res.status(200).json({ 
       status: 'Login successful!', 
       success: true, 
       token: token 
      }); 
     }); 
    })(req,res,next); 
}); 
router.get('/logout', function(req, res) { 
     req.logout(); 
    res.status(200).json({ 
     status: 'Bye!' 
    }); 
}); 
module.exports = router; 

Main.jsファイル。このmain.jsファイルで、このトークンをこのgetメソッドで送信したいと思いますか?パスポートdocumentationあたりとして

$(".get-users-button").click(function() { 
    $.ajax({ 
     method: "GET", 
     url: " http://localhost:3000/users" 
    }) 
    .done(function(msg) { 
     console.log(msg); 
     template(msg); 
    }); 
}); 
+0

ユーザーがログインしたときに、ブラウザでトークンを送信するだけで、毎回検索する必要があります。 –

+0

@ArpitSolanki thats良いアイデアbroとlocalstorageにも格納するが、私は変数broとして他のアイデアを格納したいのですか? – Kannan

答えて

0

認証が成功した場合、次のハンドラが呼び出され、req.userプロパティには、認証されたユーザに設定されます。あなたのフロントエンドがで何かを行うことが可能なビューに

var token = Verify.getToken(user) 

:私が正しくあなたの質問を理解していた場合

は今、あなたはから入手token値を渡したいです。次のミドルウェアを使用してビューに変数を渡すことができます。

app.use((req, res, next) => { 
    res.locals.token = Verify.getToken(req.user) 
    next() 
} 

は、より多くの詳細については、res.localsのドキュメントを参照してください。


使用例:

app.js

const express = require('express') 
const app = express() 

app.set('view engine', 'pug') 

app.use((req, res, next) => { 
    res.locals.text = 'asdf' 
    res.locals.token = 'abc' 
    next() 
}) 

app.get('/', (req, res) => { 
    res.render('index') 
}) 

app.listen(3000,() => { 
    console.log('listening on 3000') 
}) 

views/index.pug

doctype html 
html 
    head 
    title= title 
    body 
    h1= text 
    script. 
    console.log('#{token}') 
+0

あなたは私の質問を理解しましたが、varトークン= verify.getToken(ユーザ)の隣にコードを追加したいという変数を渡したいと言った最後の例を理解できませんでした。たとえそうであっても、私のmain.jsファイルでそれにアクセスするにはどうすればいいのですか?あなたは私を精巧にすることができますか? – Kannan

+0

これは単なるミドルウェアです。ミドルウェアを理解できない場合は、エクスプレスドキュメントを参照して情報を入手するか、別の質問をしてください。以上のことから、上記のミドルウェアは_every_リクエストにトークンを渡し、例を含めるように私の答えを更新しました。 –

+0

あなたの助けを借りて私はlocalstorageを使用して、クライアントに渡しました – Kannan

0

あなたが戻ってあなた/ログインエンドポイントへのPOSTからの正常な応答を取得し、上のトークンを保存しますクライアント側(例:window.localStorage.setItem('<your-namespace>-user-token', <the token goes here>);

ユーザーが「get-users-button」をクリックすると、トークンをストレージから取り出して(たとえば、window.localStorage.getItem('<your-namespace>-user-token');)、必要に応じて変数に格納します。

次に、ユーザーを取得するために、{ 'x-access-token': <token variable goes here> }をリクエストヘッダーに追加します。

+0

この回答をお寄せいただきありがとうございます。しかし、どんな考えでも、私はどのようにユーザーログインしてここに渡す場合は取得しているトークンの値を渡すことができますか? – Kannan

+0

localstorageに格納され、私のヘッダーは異なるヘッダーです:{ \t \t 'x-access-token':トークン \t \t} – Kannan

関連する問題