Flutter & Firebase のBackendをRailsで作る

目的

Flutter & Firebase を利用したBackendのAPIRailsで作ってみる。

やったこと

Railsの初期セットアップ

bundle init して、生成された Gemfile の railsコメントアウト

$ bundle config set path 'vendor/bundle'
$ bundle install
$ bundle exec rails new . --api
$ echo vendor >> .gitignore
$ git init
$ git add .
$ git commit -m "first commit"

$ bundle exec rails s

で、localhost:3000 番でRailsが開ける

DBのModelを作る

$ bundle exec rails g model members
$ bundle exec rails migration

認証を作成

Flutter から Firebase で呼ばれるので、firebaseIDをSDKから取得する。

firebaseToken を検証するRubySDKはないので、こちらをそのまま利用。

RubyでFirebaseのidトークンを認証に使ってみる - Qiita

tokenの取得については、こちらを参考に実装。

【Rails】RailsでAPIの簡単なトークン認証を実装する - Qiita

  def authenticate
    if ENV['DEBUG'].present?
      @firebase_id = DEBUG_FIREBASE_ID
      return
    end

    authenticate_or_request_with_http_token do |token, _|
      @firebase_id = _verify_id_token(token)
    end
  end

Flutter 側の呼び出しを作成

import 'package:firebase_auth/firebase_auth.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

Future<http.Response> getApi(String path) async {
  final token = await FirebaseAuth.instance.currentUser.getIdToken();

  Map<String, String> headers = {'authorization': "Bearer $token"};

  return await http.get("http://localhost:3000/$path", headers: headers);
}