2016-07-11 3 views
0

Я работаю с токеном jwt, чтобы подтвердить регистрацию пользователя. Уникальный URL-адрес отправляется на электронную почту пользователя и перенаправляется на страницу аутентификации, токен декодируется на стороне сервера, и мне нужно отправить эти данные json на угловую, с клиентской стороны. Как это сделать, используя токен в качестве параметра запроса и извлекать его с помощью ngResource?Как получить токен JWT от Express to Angular, используя ngResource?

server.js

'use strict'; 

var express = require('express'); 
var app = express(); 
var router = express.Router(); 
var bodyParser = require('body-parser'); 
var nodemailer = require('nodemailer'); 
var jwt = require('jsonwebtoken'); 
var moment = require('moment'); 

var port = process.env.PORT || 5000; 

app.use(express.static('./src/client/')); 
app.use(express.static('./')); 
app.use(express.static('./.tmp')); 
app.use('/*', express.static('./src/client/index.html')); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

// sign with default (HMAC SHA256) 
var expires = moment().add(12, 'hours').valueOf(); 
var token = jwt.sign({ 
    user: 'userdata', 
    iat: Math.floor(Date.now()/1000), 
    expireIn: expires 
}, 'thisismysecretstring'); 


// nodemailer sendMail function 
app.post('/sendMail', function(req, res) { 
    var transporter = nodemailer.createTransport('smtp://b204bf8f6ede15:[email protected]:2525'); 
    var data = req.body; 
    var mailOptions = { 
    from: '[email protected]', 
    to: data.email, 
    subject: 'Email sent by ' + data.displayName, 
    html: '<p>Please click on url below to register</p><br><a href="http://localhost:3000/auth/?token='+token+'">CLICK HERE</a>' 
    }; 
    transporter.sendMail(mailOptions, function(error, info) { 
    if (error) { 
     return console.log(error); 
    } 
    console.log('Message sent: ' + info.response); 
    }); 
    res.json(token); 
}); 

// decode token from url parameter 
app.get('/auth', function(req, res) { 
    var token = req.query.token; 
     try { 
      var decoded = jwt.verify(token, 'thisismysecretstring'); 
      if (decoded.exp <= Date.now()) { 
      res.end('Access token has expired', 400); 
      } 
      res.json(decoded); 
     } catch (err) { 
      console.log(err); 
      res.json(err); 
     } 
}); 

// router.use(function(req, res, next) { 
//  var token = req.query.token; 
//  try { 
//   var decoded = jwt.verify(token, 'thisismysecretstring'); 
//   res.json(decoded); 
//  } catch (err) { 
//   console.log(err); 
//   res.json(err); 
//  } 
// }); 
// app.use('/auth', router); 

app.listen(port, function() { 
    console.log('Express app listening on port: ' + port); 
    console.log(__dirname); 
}); 

token.js формате

(function() { 
    'use strict'; 
    angular 
     .module('xfire.token', ['ngResource']) 
     .factory('Token', function($resource) { 
      return $resource('auth/:token', { 
       token: '@token' 
      }); 
     }); 
})(); 

URL:

http://localhost:3000/auth/?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiZ2NmYWJyaSIsImlhdCI6MTQ2ODI0NDI1NCwiZXhwaXJlSW4iOjIxNjAwMDAwfQ.5rs1rlWMTTcap4idG-XOU-UiwbU0YzlnAYjm9Vwz-B0 
+0

Можете ли вы показать свой код AngularJS? –

ответ

0

Я обычно отправить его в заголовке, чаще всего я называю это x-auth-header.

Я не использую и не рекомендую никому (кроме игры) использовать ngResource, так как это ограничение.

Лично я использую restangular с перехватчиками запроса/ответа.

Реактор-перехватчик для захвата и декодирования токена и запрос перехватчика для авторизации запроса с помощью "Bearer" + tokenString.

Смежные вопросы