hubot-authの導入でハマった話
やあ、今回はhubotを育てる回だよ。
前回導入したhubotに権限管理機能を追加するhubot-authを追加したのだが、そのときにちょっとしたことで詰まったのでメモを残しておく。
hubot-authの導入、よくわからないところでハマったがなんとか権限管理できるようになった。
— Yosuke Tamura (@YosukeTamura) May 28, 2015
hubot-authを追加するとユーザに対してhubotコマンド実行のパーミッションを設定できる。
% npm install hubot-auth --save # hubot-authをインストール
external-scripts.jsonにhubot-authを加え、環境変数にslackのusernameをexportしたのだが...
ファッ!!
この後、めちゃくちゃheroku上の環境変数を確認したが原因は分からなかった。
半ばあきらめかけていたところでhubot-slackのGitHubリポジトリを見るとこんな記述が...
If you're using the hubot-auth script, you can get the user IDs required for the HUBOT_AUTH_ADMIN setting by calling the users.list API method.
どうやら登録時に決めたusername(yosuke-t)とIDは別らしい。
hubot-authの方に書いてくれ。(よくよく考えればチームが異れば同名で登録できるのでusername=IDなわけがなかった)
slackにhubotを連携した時に使ったトークンをusers.list method | SlackのExtra argsに
token=xxxx-xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx
という感じで入力してTest Methodを実行したところ、slack上のユーザの情報がjsonで返ってくる。
この情報を見ればわかるがIDは UXXXXXXXX のような形式で内部的に利用されているもので、usernameとは別物だ。
こちらの方はslackユーザ全体で一意に定まる。
つまり、環境変数HUBOT_AUTH_ADMINにはこっちの UXXXXXXXX の方をexportする必要がある。
その結果。
と、無事権限管理ができるようになった。
ちなみにslack上のコマンドで指定するのはusernameの方なので注意(ややこしい)。