2014-09-21 1 views
2

node.sdk, stormpath, express.js 및 passport.js를 사용하여 새 웹 사이트에 대한 사용자 계정 시스템을 만들고 있습니다. 그래서 맞춤 데이터 슬롯이있는 계정을 만들었습니다. 로그인 할 때 로그 아웃하고 검색 할 때이 사용자 정의 데이터 슬롯에 새 데이터를 게시하는 방법을 알고 싶습니다. 노드를 처음 사용하고 코드를 어디에 두어야하는지 또는 액세스 방법을 모르겠습니다. 그들이 로그인했을 때의 '사용자'계정 정보. 내가 passport.js가 인증을 처리하고 있다고 말할 수 있기 때문에 아마 stormpath api에서 사용자 계정 URL을 검색하는 사용자 이메일을 볼 수 없습니다. 여기에 뭔가 빠졌어 ??사용자 계정 데이터 호출 및 저장

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 ('로그인', {title : '로그인', 오류 : req.flash ('오류') [0]})}} ;

// 사용자를 인증하십시오. router.post ('/ login', passport.authenticate ('stormpath', {successRedirect : '/ home', failureRedirect : '/ login', failureFlash : '여기에 들어가려면 계정이 필요합니다. ',}));

// 대시 보드 페이지를 렌더링합니다. router.get ('/ home', function (req, res) {if (! req.user.status! == 'ENABLED') {return res.redirect ('/ login');}

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

답변

5

위대한 질문입니다. 고맙게도 Passport API를 사용했습니다. "사용자 지정 콜백"기능을 사용하려면 해당 기능 내에서 사용자에게 액세스 할 수 있습니다. 스톰 패스 전략의 경우 사용자 개체는 스톰 패스 계정 인스턴스가됩니다. 그러나 현재 옵션으로 전달중인 리디렉션 논리 중 일부를 다시 구현해야합니다. 여기에이 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