2016-06-12 1 views
1

여권과 번들로 제공되는 모든 oAuth 인증을 사용하는 앱이 있지만 데이터베이스/사용자 생성을 위해 외부 서비스를 사용하고 있습니다.로컬 데이터베이스없이 PassportJS를 사용할 수 있습니까?

나는 같은 것을 할 경우 :

passport.use('local-signup', new LocalStrategy({ 
     usernameField : 'email', 
     passwordField : 'password', 
     passReqToCallback : true  }, 
    function(req, username, password, done) { 

     request.post('http://myapiservice.com/createuser').then(function(err, response, body){ 
      return done(err, body.user); 
     }) 

    })) 

어떻게이와 원격으로 저장된 사용자를 사용해야합니까? 나는 POST API 호출 이외의 다른 방법으로 데이터베이스에 연결하지 않아 사용자를 검색하고 GET 호출을 통해 사용자를 검색하므로 익스프레스 'req.user의 동작/업데이트 방법이 확실하지 않습니다.

다른 위치에 대한 단일 가이드 또는 질문을 찾을 수 없으므로 약간의 안내가 마음에 들어요!

답변

2

req.user은 전략의 콜백 done을 호출하여 두 번째 인수로 "돌아 오는"것으로 채워집니다. 예제 코드에서는 body.user이됩니다.

그것은 어느 방법으로 원하는 사용자를 인증하는 완벽하게 합법적이고, 당신의 코드 예제는 전략 콜백에서 사용자를 만들 에 의미하지만 원격 API (사용을 인증하지 않았다 제공 (충분히 합법적 인 것 같다 아래 설명 참조)).

전략적 콜백은 사용자 데이터가 "조회 된"유일한 곳이 아니며 인증 된 모든 경로에 대해 호출되는 passport.deserializeUser() 콜백 내부에서도 발생합니다.

얼마나 많은 사용자 정보를 세션에 저장할지 결정하는 것은 사용자의 책임입니다 (serializeUser()의 기능입니다). 더 많은 정보를 저장하면 deserializeUser()에 대한 원격 API를 호출 할 필요가 없다는 것을 의미하지만, 세션에 로컬로 저장된 모든 사용자 데이터가 원격 API와 동기화되지 않을 수도 있습니다 (발생할 수있는 경우).

EDIT : 전략 콜백에서 사용자 생성과 관련하여 : 이것은 불법이 아니지만 권장되는 경우 전략 유형에 따라 다릅니다.

리모컨 서비스 (예 : passport-facebook)에 대한 인증을 구현하는 전략의 경우 전략 콜백에서 사용자를 만들거나 업데이트하는 것이 일반적입니다. 그 이유는 원격 서비스에서 정보를받는 유일한 진입 점이기 때문입니다.

그러나 상황에 따라 passport-local 일반적으로 새로운 사용자를 만드는 데 필요할 수있는 모든 사용자 정보에 항상 액세스 할 수있는 것은 아니므로 전략 콜백 만 사용해야 인증 할 수 있습니다.

작성 사용자 양식이 게시되는 별도의 Express 경로를 작성하는 것이 좋습니다 (사용자의 경우와 같이 로컬 데이터베이스 또는 원격 서비스에서 사용자 작성).

+0

나는 * 위 * 코드 스 니펫에서 요청 POST를 사용하여 사용자를 만들고 싶습니다. 그게 가능하지 않니? 영구 로그인을 작동시키기 위해'express-session '과 관련이 있어야 할 특별한 것이 있습니까? – Jascination

+0

@ Jascination 사용자 생성에 대해 좀 더 설명하기 위해 대답을 편집했습니다. 아무리해도 나를 무시하지 않아도된다. = D – robertklep

+0

해명 해 주셔서 감사합니다. 마지막으로, 전략 콜백을 사용하여 사용자를 만들지 않는다면,'done (err, user)'에 다시 전달할 의도가 무엇입니까? – Jascination

관련 문제