2017-12-30 8 views
1

다음 시나리오에 대한 모범 사례를 찾아야합니다. 나는 상대적으로 새로운/취미 프로그래머입니다. Dialogflow를 사용하는 채팅 봇을 개발 중입니다. 사용자가 다른 메시징 응용 프로그램을 사용하여 백업 된 데이터베이스의 데이터 및 정보에 액세스 할 수있게하려면 사용자에게 인증을 요청해야합니다. 관련 데이터를 쿼리하기 위해 사용자의 신원을 확인해야합니다. 또한 사용자가 계정을 만들고 로그인 할 수있는 웹 사이트도 있습니다.다른 액세스 방법에 대한 Express OAuth 권한 부여

나는 웹 사이트를 만들었으며 모든 OAuth 연결이 정상적으로 작동합니다. 사용자 추적을 위해 계정 생성 정보를 저장하고 있습니다.

나는 막혔다. 내 데이터베이스의 계정 (토큰/일종의 간단한 프로필 식별자)에 연결하기 위해 메시징 플랫폼에서 사용자를 인증 할 수 있어야한다.

OAuth 흐름 및 라우팅에 대한 조언을 찾고 있습니다. Express를 사용하고 있습니다./액세스 계정 생성

한 가지 방법 :의 한 예로 구글 계정에 연결을 사용하자

웹 사이트 -> 회원 가입/로그인 -> 구글에게 보내기 -> 신원 확인 -> 콜백로 돌아 가기 (내 웹 사이트의 보호 구역).

계정에 액세스하는 또 다른 방법 :

DialogFlow 채팅 -> (I 보호이 경로를 갖고 싶어)은 webhook 보내기 -> 쿼리 데이터 - -> 인증합니다 /이 사용자를 인식> 사용자의 장치에 정보를 돌려줍니다. 이 프로세스는 웹 사이트 프로세스와 동일한 흐름에 대한 액세스가 필요합니다. 지금 가지고 있듯이 내 콜백은 항상 내 웹 사이트의 내부 페이지를 참조합니다. 그러나 사용자가 Google 길잡이를 통해 정보에 액세스하려고하는 경우이를 원하지 않는다고 생각합니다.

  • 이 경로 조건문을 통해 서로 다른 흐름을 처리 :

    은에 그것을 최고의/나은 사례인가?
  • 같은 계정 논리를 사용하여 다른 경로 끝점을 설정합니다 (저는 passport.js를 사용하지만 다른 콜백 URL을 지정합니까?).
  • 다른 액세스 방법을 처리하기 위해 다른 URL로 다른 API 자격 증명을 등록 하시겠습니까?
  • 메시징 앱에서 콜백을 처리하는 방법은 무엇입니까?

내 초보자의 경우, 더 복잡하고 단순한 해결책이 있습니까? 고맙습니다!

답변

0

나는 스스로 문제를 해결했다.

나는이 대답을 여기 (Nodejs Passport - Using Multiple Google Strategies)에서 보았다.

코드가 필요하거나 필요없는 사용자에게 적합합니다.

내 경로는 다음과 같습니다

// GOOGLE ROUTER 

    //process route to verification 
    router.get('/google', passport.authenticate('google', { scope : ['profile', 'email'] })); 

    //callback after verification 
    router.get('/google/callback', passport.authenticate('google', { 
     successRedirect : '/profile', 
     failureRedirect : '/' 
    })); 

// DIALOGFLOW ROUTER 
    router.get('/auth', passport.authenticate('google-dialogflow', { scope : [ 'email'] })); 

는 내가 인증 할 방법에 별도의 이름 매개 변수를 추가했습니다.

여권에.js file 두 가지 여권 전략이 있습니다. 하나는 시작 :

passport.use('google',new GoogleStrategy({ 
    clientID  : configAuth.googleAuth.clientID, 
    clientSecret : configAuth.googleAuth.clientSecret, 
    callbackURL  : configAuth.googleAuth.callbackURL, 
    passReqToCallback : true 
}, 
function(req, token, refreshToken, profile, done) {... 

다른 시작에 : 나는 다른 자격 증명 (클라이언트 ID, clientSecret, callbackURl)를 사용할 수 있도록

passport.use('google-dialogflow',new GoogleStrategy({ 
    clientID  : configAuth.dialogAuth.clientID, 
    clientSecret : configAuth.dialogAuth.clientSecret, 
    callbackURL  : configAuth.dialogAuth.callbackURL, 
    passReqToCallback : true 
}, 
function(req, token, refreshToken, profile, done) {... 

가 나는 또한, 구글 API 콘솔에서 다른 자격 증명을 생성 데이터/사이트에 액세스하는 다른 방법.

다시 말하지만, 이것이 최선의 방법인지 아니면 좋은 방법인지는 모르지만 내 문제는 해결되었습니다.

관련 문제