【開発】勝ったぞチクショウ!!!
どうも、こんにちは。ひとりアプリ開発者のNeji(ねじ)です。
今日のブログは「結果としてすごく簡単なことを済ませるために、めっちゃ遠回りしたのよ今日」というお話です!
やりたいことがあったのよ
急にIT技術の話題で失礼します。
現在、私はWebアプリを開発しています。フロントエンド:ES6、バックエンド:Rails7 という構成です。
で、Webアプリを公開する前に、セキュリティ周りをしっかり作っておく必要がありました。ここがけっこー難所でした。。
Railsのアクションに対する認証: Devise導入でサクサク。
→ ここは、セオリー通りですね。
アプリが通信するAPI(=Grape)に、認証を入れる。
→ これのやり方が、わからなかった!なので、今日一日かけて色々調べてました。
理想は「認証の状態をDeviseに一元化しておき、GrapeAPI側でそれを参照する」という構成なのですが、これを上手くコードで書く方法がわからず。。
めっちゃ調べた。実験もした。
どうも、同じ課題にトライしている方達はいるらしく、ネットを見ていくと「それぞれの方の、それぞれの解決方法」が公開されていました(ありがたい!)。
わりとしらみつぶしにひとつひとつ理解したり手元で試したりしていったのですが、どうもしっくりこない。。(そもそも動かなかったり)
結論:ほんの数行足すだけで済んだじゃん!!
そんなこんなで「もう夜だし、どこかで妥協しなきゃなぁ・・・」と思っていたところ。
ありました!!ベストな解法が!!!
class Root < Grape::API
helpers do
def current_user
User.find(env['rack.session']['warden.user.user.key'].first.first)
end
def session
env["rack.session"]
end
end
end
rackからsessionを読み出し、そこからDevise認証の状態を参照できるんですね。この発想はなかった。。
上記の、ほんの数行を追加するだけで、GrapeAPIからDevise認証の状態を見れるようになりました。解決!
本日の、よかった探し
……いろいろ、勉強になりました。
なんか「JWT /JOSEファミリのRFC」とかまで見に行ったり。nodeでJSON認証のサンプル作ってみたり。
結局、全部ボツだったけどな!!
け、経験値は上がったから。。がんばったよ、うん。。。
この記事が気に入ったらサポートをしてみませんか?