2014-09-21 2 views
2

Я создаю систему учетных записей пользователей для своего нового сайта, используя node.sdk, stormpath, express.js и passport.js. Поэтому я создал учетную запись с пользовательским слотом данных. Я хотел бы знать, как я могу публиковать новые данные в этом пользовательском слоте данных, когда они выходят из системы и извлекают его при входе в систему. Я начал использовать новый узел, и я не знаю, куда поместить мой код или как получить доступ «пользовательская» информация учетной записи, когда они вошли в систему. Из того, что я могу сказать, паспорт.js обрабатывает аутентификацию, поэтому я, вероятно, не могу видеть электронную почту пользователей, чтобы искать URL-адрес своей учетной записи пользователя на маршруте штурма ... возможно, m что-то здесь отсутствует ??Вызов и сохранение пользовательских данных пользователя Пользовательские данные

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 ('/ login', passport.authenticate ('stormpath', {successRedirect: '/ home', failureRedirect: '/ login', failureFlash: 'Ой, я думаю, вам нужна учетная запись, чтобы войти сюда. ',}));

// Извлеките страницу приборной панели. 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,});});

ответ

5

Это отличный вопрос. К счастью, API Passport вы охватили. Вы хотите использовать функцию «Пользовательский обратный вызов», тогда вы можете получить доступ к пользователю внутри этой функции. В случае стратегии Stormpath пользовательский объект будет экземпляром учетной записи Stormpath. Однако вам нужно будет повторно реализовать некоторую логику перенаправления, которую вы сейчас используете в качестве параметров. Вот пример того, как это будет выглядеть со стратегией 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 может использоваться для нескольких запросов и должен быть создан только один раз для каждого процесса.

+0

Ооооооооооооооооооооооооооооол! Просто дай мне понять это правильно; Я могу получить доступ к электронной почте пользователей с помощью user.email ??? – CHeffernan087

+1

Правильно, user.email предоставит вам адрес электронной почты учетной записи – robertjd

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