Firebase Auth+Rails+SPA를 사용한 인증 기능

7098 단어 FirebaseRailsRubytech

개시하다


최근에 Firebase의 인증 기능을 사용해 보았기 때문에 그 과정과 필요한 요소에 대한 귀결은 다음과 같다.
단계는 다음과 같습니다.
이번에는 API 측 실장이기 때문에 클라이언트 측에서 Firebase를 사용하는 부분은 쓰지 않았다.
또한 Rails 개발이 진행 중인 동안 JWT 인증을 가져옵니다.
4
1. firebase-auth-railsの導入
2. Redisのセットアップ
3. firebase_id_token.rbの作成
4. firebase_uidを保存するカラム追加のmigrationファイル作成
5. コントローラーへの記述
기본적으로 Firebase-auth-rails의github를 참조하면서 진행한다.
https://github.com/penguinwokrs/firebase-auth-rails

Firebase-auth-rails 가져오기


이번에 Firebase-auth-rails라는 Gem을 이용하여 JWT 인증을 실시했습니다.
Gemfile에 다음과 같이 설명되어 있습니다.
Gemfile
gem 'firebase-auth-rails'
gem를 설치하다.
$ bundle install

Redis 설정


Firebase-auth-rails는 처리 내에redis가 필요하기 때문에(firebase id token 이gem를 사용했기 때문일 수 있음) redis를 설치해야 합니다.
이번에는 docker로 Redis를 가져옵니다.
docker-compose
redis:
    image: "redis:5.0.5"
    ports:
      - "6379:6379"
    command: redis-server
    volumes:
      - "./data/redis:/data"
api:
    environment:
      REDIS_URL: redis://redis:6379/0 # redisとの接続に必要
REDIS는 Rails와 Redis를 연결하기 위한 것입니다.URL을 기술할 필요가 있다고 합니다.
https://stackoverflow.com/questions/48802444/rails-docker-sidekiq-error-connecting-to-redis-on-127-0-0-16379-errnoe
However, there are some issues using localhost with docker in development, which is why the rails server is bound to 0.0.0.0. Thus, we need to specify with an env variable the specific address of where sidekiq can connect to redis

firebase_id_token.rb 만들기


위에서 말한 바와 같이 Firebase-auth-rails의 Firebaseid_Token을 사용하고 있습니다.
저기 있어요. Firebase.id_토큰을 만드는 인티리어.
config/initializers/firebase_id_token
FirebaseIdToken.configure do |config|
  config.redis = Redis.new
  config.project_ids = ['firebase_project_id']
end
이 설명만 있으면 설치가 완료됩니다.

firebase_id를 저장하는 추가 열을 위한migration 파일 만들기


Firebase에 저장된user의 uid와 DB에 저장된 uid를 대조해야 합니다.
따라서user에 id의 열을 추가했습니다.
$ rails g migration AddFirebaseUidToUsers uid:string
class AddFirebaseUidToUsers < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :uid, :string
  end
end
$ rails db:migrate
이로써 id를 저장하는 열 추가가 완료되었습니다.
설정의 마지막 단계에서 rails console에서 다음 명령을 실행하여 Google의 x509 인증서를 받습니다 (모바일 JWT 인증이 필요합니다)
FirebaseIdToken::Certificates.request
https://github.com/fschuindt/firebase_id_token
Before verifying tokens, you need to download Google's x509 certificates.
To do it simply:
FirebaseIdToken::Certificates.request

컨트롤러의 기술


Firebase를 실행하기 위한 인증 응용 프로그램controller firebaseauth의 기술을 계속 사용합니다.
application_controller
class ApplicationController < ActionController::API
  include Firebase::Auth::Authenticable
  before_action :authenticate_user # authenticate_xxx にすることでuser以外でも認証可能
end
이 컨트롤러를 계승하여 각 동작 전에 인증,current사용자를 얻을 수 있습니다.

끝맺다


Firebase를 사용하면 JWT 인증을 쉽게 수행할 수 있습니다.
마지막으로 인증 프로세스를 요약합니다.
1. クライアントからfirebaseにemailとpasswordを投げる
2. firebase上に一致する情報を持つuserがいるならfirebaseはトークンを返す
3. 受け取ったトークンをリクエストヘッダに含んでRails側にリクエストを投げる
4. Railsは渡されたトークンからJWT認証を行い、firebaseからuserのuidを受け取る
5. 受け取ったuidとDBに保管されたuidを照合して一致するuserを返す(current_user)

좋은 웹페이지 즐겨찾기