質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

570閲覧

【Slack API】FirestoreのドキュメントIDをNode.jsと共有したい【Node.js + Firestore】

goki

総合スコア13

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/11/17 11:46

編集2021/11/17 12:37

前提・実現したいこと

自作アプリにて、Slack認証(https://api.slack.com/authentication/oauth-v2)のバックエンドコードをNode.jsで記述しており、アプリユーザーがSlack認証をした際に得られる情報(user_idやaccerss_tokenなど)をオブジェクトにまとめました。

DBのFirestoreにすでに存在しているユーザードキュメント配下の、サブコレクションのドキュメントに、そのオブジェクトを追加したいと考えていますが、どのようにSlack認証したユーザーと、Firestore上でのユーザードキュメントを紐づければ良いかが思いつかず、苦戦しております。

どうか、答えとまではいかなくても「こうすれば良いかも」というヒントをいただけると大変助かります。
よろしくお願いいたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

設計の問題であれば、別の質問に対して私がしたこちらの回答がもしかすると役に立つかもしれません。

基本的には、メインのユーザーアカウントに紐づく別のカスタムのユーザー接続情報を設計する感じになると思います。Slack 固有の話ではなく、Google アカウントでも Facebook アカウントでもログインできるアプリケーションの設計をイメージしてみるとよいのではないでしょうか。

なお、Firestore の個別の設定・実装の話でしたら、私は詳しくないので誰か他の方が回答してくれるとよいですね。

投稿2021/11/18 05:04

seratch

総合スコア215

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

goki

2021/11/19 02:22

いつもご回答ありがとうございます! 以前のご回答にありました以下の設計例に関しまして、 Slackのアカウント用テーブルを用意したとして、 goki_account_idというのをどのようにテーブル内に格納すれば良いか(Slack連携したユーザーをアプリ内で特定できないのかなと。。!)のイメージがわいておらずでして。。 教えていただけますと幸いですmm table: slack_accounts * id * goki_account_id -> goki_accounts.id (n:1) * team_id * user_id * user_token (has n slack_messages)
goki

2021/11/19 02:37

ちなみに、emailをSlack APIで取れるとのことで、それをキーにするのが良いかなと思ったものの、アプリで登録したメールアドレスとそのslackワークスペースで登録したメールアドレスが違うことはざらにあるかと思うので、それは最後の策かなと。。
seratch

2021/11/19 04:52

ああ、すみません。同じ方だと気付かず回答してしまいました。。。Firestore 詳しくないのですが、ちょっと調べた感じだとサブコレクションというのを作っていく感じなんですね。私の先のコメントは RDB 的な考え方になっているので、実際の実装はサブコレクションになるのかもしれません。一応、アカウントのドキュメントの ID を参照することもできはするようですが。 >Slack連携したユーザーをアプリ内で特定できないのかなと。。 これは前のコメントでも書いた通りなのですが、基本的には goki さんが作られているサービスで、まずブラウザでのログイン機能を実装した上で、そのログイン状態に Slack ワークスペースごとの OAuth 結果を n 個くっつけていくイメージですので、そのような実装をする必要があります。 その後であれば、Firestore に 1:n で n 個の Slack との紐付けを持っている状態になりますので、アプリ内の goki さんのサービスのアカウントでログインしたら、そのアカウントがどの Slack ワークスペースと繋がっているかがわかりますよね。 ・・前回とほぼ同じようなことを書いている気がしますので、ちょっと文章でこれ以上はお力になれなさそうです。 Firestore にも複数サービスとの OAuth 連携にも詳しい、直接質問したり、ペアプロしてくれる方を探されるとよいのかもしれません。頑張ってください。
goki

2021/11/19 04:57

ご回答ありがとうございました! 物分かりが悪く大変申し訳ございません。。! >そのログイン状態に Slack ワークスペースごとの OAuth 結果を n 個くっつけていくイメージ これができれば解決すると思うのですが、最後にもう少しだけこちらについて具体で教えてもらえると嬉しく。。! 検索用のワードだけでも大丈夫ですのでどうかよろしくお願いいたします!
goki

2021/11/19 05:11 編集

>そのログイン状態に Slack ワークスペースごとの OAuth 結果を n 個くっつけていくイメージ 自分の中でこの実現方法をイメージできない理由としては、以下が分離してしまっており通信の手段がわからないためです。。補足でした。 ・ログイン状態の保持 => Swift ・OAuth結果の取得 => サーバー(Node.js)
seratch

2021/11/19 05:17 編集

最後に可能な限りで書いてみます。 まず、アプリではなく Web サービスを作ります。その Web サービスにはログイン機能があって、ユーザーはまず goki さんのサービスのアカウントでログインしておきます(そして、アプリの方でもこの同じアカウントでログインできるようになっています)。ブラウザにはログイン状態を保持している Cookie が保持されていて、それによってログイン状態になっています。 この状態で、Slack の情報を連携させたいユーザーは、[goki さんがあらかじめ用意しておいた Slack の連携アプリ]( https://api.slack.com/apps )を [Slack ワークスペースで有効化させるための Slack の OAuth フロー]( https://api.slack.com/authentication/oauth-v2 )を実行します。こうすることでそのユーザーは goki さんのサービスに Slack の情報へのアクセスを可能とするトークンを発行・管理させます。 goki さんのこの Web サービスのサーバーサイドは、発行された Slack のトークンをログイン中の goki さんのサービスでのアカウントと紐づける形で Firestore のドキュメントに保存します。それが 1:n の関係のslack_accounts ドキュメントです。ユーザーがブラウザでやることはここまでです(連携解除とか追加の機能はあるにせよ)。 この状態で、アプリの方で同じアカウントでログインします。このアカウントには先程のブラウザ上での連携によって Firestore のデータベース内で Slack ワークスペースごとのトークンが紐づいています。メッセージをサブコレクションとして保持する想定のようですので、メッセージの取得自体はサーバー側で行われるのかなと思います。そうであれば Slack の API トークンはサーバー側だけで使います。アプリはログインしたユーザーにひもづいたメッセージの一覧を取得して、それを表示するのが主な仕事になるのだろうと思います。 私の teratail での活動は、主に Slack API の使い方で困っている方をお助けする啓蒙活動で行っております。申し訳ないですが、このスレッドの回答はここまでとさせてください。便利なアプリが完成するとよいですね!
goki

2021/11/19 05:34

確認させていただきましたが、 こちらの状況が MacOSのDesktopアプリであることから実現は難しいかもしれないですね。。(前提を記載しておらず申し訳ございません。) ご丁寧にご回答ありがとうございました! 大変お手数おかけいたしましたmm
guest

0

自己解決

「Webブラウザで受け取るOAuthのレスポンスをどのようにしてクライアント側に渡すか」ということが主題だったのですが、下記のちょうどよさそうな記事を見つけましたので、こちらを参考にしてトライしてみます。
https://qiita.com/TakahikoKawasaki/items/8567c80528da43c7e844

投稿2021/11/22 04:08

編集2021/11/22 04:09
goki

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問