2017-12-30 33 views
1

次のシナリオのベストプラクティスを理解することを検討しています。私は比較的新しい/趣味のプログラマーです。 Dialogflowを使用しているチャットボットを開発中です。私は、ユーザがバックアップされたデータベースのデータや情報にアクセスできるようにするために、さまざまなメッセージングアプリを使用できるようにしたいと考えていますが、ユーザを認証する必要があります(関連するデータを照会するには、私はまた、ユーザーがアカウントとログインを作成できるWebサイトを持っています。異なるアクセス方法のExpress OAuth認証

私はウェブサイトを作成しました。すべてのOAuth接続が正常に動作しています。私はユーザーを追跡するためにアカウント作成に関する情報を保存しています。

私は、メッセージングプラットフォーム上のユーザーをデータベース上のアカウント(トークン/単純なプロファイル識別子など)にリンクするために認証できるようにしたいと考えています。

OAuthのフローとルーティングに関するアドバイスを探しています。私はExpressを使用しています。のは、一例として、Googleアカウントのリンクを使用してみましょう:/アクセスアカウントを作成するための

一つの方法:

ウェブサイト - >新規アカウント/ログイン - > Googleに送信 - >アイデンティティの確認 - コールバックに>戻る(内ウェブサイトの保護された領域)。

アカウントにアクセスするための別の方法:

DialogFlowチャットを - >(私は保護され、このルートを持ちたい)ウェブフックに送る - >クエリーデータ - - >認証/ユーザーを認識する>ユーザーのデバイスに情報を返します。このプロセスでは、Webサイトプロセスと同じフローにアクセスする必要があります。今のように私のコールバックはいつも私のウェブサイトの内部ページを参照しています。しかし、ユーザーがGoogle Assistantを使って情報にアクセスしようとしているのであれば、私はそれが欲しいとは思わないでしょう。

は最高/より良いプラクティスですへ:

  • ルート条件文を経由して別のフローを処理?
  • 同じアカウントロジック(私は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'] })); 

私はauthenticateメソッドで別の名前のパラメータを追加しました。

次にパスポートに入れます。jsファイル私は2つのパスポート戦略を持っています。一つは、で始まる:

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) {... 

として他の開始:

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) {... 

私は別の資格情報(クライアントID、clientSecret、callbackURl)を使用することができるように、私はまた、GoogleのAPIのコンソールで別の資格情報を作成しデータ/サイトにアクセスするさまざまな手段があります。

また、私はこれがベストプラクティスであるかどうかわかりませんが、私の問題を解決しました。

関連する問題