2017-07-09 3 views
1

Hallo bin ich ein Anfänger zu Nodejs Ich habe Pass-Token-basierte Authentifizierung verwendet, wenn der Benutzer meldet es bietet ein Token für jeden Benutzer, den ich einige Operationen für die Benutzer, die hat Token-Werte Wenn der Benutzer beispielsweise die Liste der registrierten Benutzer sehen möchte, kann er sie anzeigen, wenn er den Token-Wert hat. Jetzt liefert es mir den Token-Wert perfekt in Postman, aber ich weiß nicht, wie ich es in einer Variablen speichern und über FRONT-END aufrufen soll. Ich möchte es über Front-End tun (wenn er auf die Schaltfläche Benutzer abrufen klickt), sollte es die Liste der Benutzer anzeigen. Ich habe das in POSTMAN getan, es funktioniert fein, ich habe keine Idee, wie es über Front-End zu tun. Mein Benutzercode (Login/Logout)Wie kann ich Token-Wert in meine lokale Javascript-Datei

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 Datei. In dieser main.js-Datei möchte ich dieses Token in dieser Get-Methode eine Idee senden?

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

Wenn sich Ihr Benutzer anmeldet, senden Sie einfach das Token als Cookie in seinem Browser und jedes Mal, wenn Sie es nur abrufen müssen. –

+0

@ArpitSolanki das ist eine gute Idee Bro und Speichern in LocalStorage auch, aber ich möchte es als Variable bro speichern so jede andere Idee? – Kannan

Antwort

0

Gemäß den documentation für Passport:

Wenn die Authentifizierung erfolgreich ist, werden die nächsten Handler aufgerufen werden, und die req.user Eigenschaft wird den authentifizierten Benutzer eingestellt werden.

Nun, wenn ich Ihre Frage richtig zu verstehen, wollen Sie den token Wert, den Sie von zu erhalten passieren:

var token = Verify.getToken(user) 

die Ansicht, in der Front-End etwas mit tun. Sie können Variablen zur Ansicht übergeben Sie die folgende Middleware:

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

der Dokumentation finden Sie weitere Informationen zu res.locals.


Beispiel Nutzung:

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

Hallo Francisco, du hast meine Frage verstanden, aber ich habe dein letztes Beispiel, das du erwähnt hast, nicht gerne Variablen übergeben willst, dass ich deinen Code neben der var token = verify.getToken (user) hinzufügen soll. Auch wenn ja, wie kann ich darauf zugreifen, dass in meiner Datei main.js bin etwas verwirrt können Sie mich – Kannan

+0

Es ist nur Middleware. Wenn Sie die Middleware nicht verstehen, lesen Sie die Informationen in den Expressdokumenten oder stellen Sie eine andere Frage.Nachdem dies gesagt wurde, wird die obige Middleware das Token an _every_ Anfrage übergeben und ich habe meine Antwort aktualisiert um ein Beispiel hinzuzufügen. –

+0

Danke für Ihre Hilfe Ich habe localstorage verwendet und an den Client weitergegeben – Kannan

0

Wenn Sie wieder eine erfolgreiche Antwort von der Post in Ihrem/login Endpunkt erhalten, speichern Sie die Token auf clientseitig (z. B. window.localStorage.setItem('<your-namespace>-user-token', <the token goes here>);)

Wenn der Benutzer dann auf den "Get-users-button" klickt, holen Sie das Token aus dem Speicher (z. B. window.localStorage.getItem('<your-namespace>-user-token');) und speichern Sie es in einer Variablen, wenn Sie möchten.

Dann, auf Ihre Anfrage, um Benutzer zu erhalten, fügen Sie Ihre { 'x-access-token': <token variable goes here> } zu Ihrer Anfrage Header.

+0

Danke für diese Antwort bro aber keine Ahnung, wie kann ich den Token-Wert übergeben, die bekommen, wenn der Benutzer sich anmeldet und es hier übergeben? – Kannan

+0

Bro getan in einem localstorage gespeichert und meine Header sind verschiedene Header: { \t \t 'x-access-token': Token \t \t} – Kannan

Verwandte Themen