【问题标题】:Calling and Saving User Account Custom Data调用和保存用户帐户自定义数据
【发布时间】:2014-11-15 17:59:57
【问题描述】:

我正在使用 node.sdk、stormpath、express.js 和 passport.js 为我的新网站创建一个用户帐户系统。所以我设置了一个带有自定义数据槽的帐户。我想知道如何在他们注销时将新数据发布到此自定义数据槽并在他们登录时检索它。我是使用节点的新手,我不知道将代码放在哪里或如何访问他们登录时的“用户”帐户信息。据我所知,passport.js 正在处理身份验证,所以我可能看不到用户通过电子邮件在stormpath api上搜索他们的用户帐户网址......也许我'我这里漏了什么??

router.post('/register', function(req, res) {

var username = req.body.username; var password = req.body.password;

// Grab user fields. if (!username || !password) { return res.render('register', { title: 'Register', error: 'Email and password required.' }); }

// Initialize our Stormpath client. var apiKey = new stormpath.ApiKey( process.env['STORMPATH_API_KEY_ID'], process.env['STORMPATH_API_KEY_SECRET'] ); var spClient = new stormpath.Client({ apiKey: apiKey });

var app = spClient.getApplication(process.env['STORMPATH_APP_HREF'], function(err, app) { if (err) throw err;

account = {

  givenName: 'John',
  surname: 'Smith',
  username: username,
  email: username,
  password: password,
  customData:{
    favList:'',
  },
};
app.createAccount(account, function (err, createdAccount) {

  if (err) {
    return res.render('register', {'title': 'Register', error: err.userMessage });
  } else {
    passport.authenticate('stormpath')(req, res, function () {
      return res.redirect('/home');
    });
  }
});
});

});

// 渲染登录页面。 router.get('/login', function(req, res) { res.render('login', { title: 'Login', error: req.flash('error')[0] }); });

// 验证用户。 router.post('/登录', passport.authenticate('stormpath', { successRedirect: '/home', failureRedirect: '/login', failureFlash: '哎呀我猜你需要一个帐户才能进入这里..Soz', } ) );

// 渲染仪表板页面。 router.get('/home', function (req, res) { if (!req.user || req.user.status !== 'ENABLED') { return res.redirect('/login'); }

res.render('home', { title: 'Home', user: req.user, } ); });

【问题讨论】:

    标签: node.js express stormpath passport.js


    【解决方案1】:

    这是一个很好的问题。谢天谢地,Passport API 为您提供了帮助。您想使用“自定义回调”功能,然后您可以访问该功能内的用户。在 Stormpath 策略的情况下,用户对象将是一个 Stormpath Account 实例。但是,您将需要重新实现您当前作为选项传入的一些重定向逻辑。以下是使用 Stormpath 策略的示例:

    app.post('/login', function(req, res, next) {
      passport.authenticate('stormpath', function(err, user, info) {
        if (err) {
          return next(err);
        }
        else if (user) {
          console.log('The account is: ', user);
          req.logIn(user, function(err) {
            if (err) {
              next(err);
            }else{
              res.redirect('/dashboard');
            }
          });
        }else{
          req.flash('error',info.message);
          res.redirect('/login');
        }
      })(req, res, next);
    });
    

    可在此处找到此自定义策略的文档:http://passportjs.org/guide/authenticate/

    另一个注意事项:我建议在路由处理程序之外创建您的 spClient。 Stormpath Client 可用于多个请求,每个进程只需创建一次。

    【讨论】:

    • 哦,好吧,现在更有意义了:)。所以让我直截了当;我可以使用 user.email 访问用户电子邮件???
    • 没错,user.email 会给你账号的邮箱
    猜你喜欢
    • 2016-07-20
    • 2021-07-02
    • 2021-04-25
    • 1970-01-01
    • 2020-08-23
    • 2015-10-18
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多