web-dev-qa-db-ja.com

Rails JSON APIのトークンベースの認証

RailsでAPIを作ります。通常の認証ではdeviseを使用しますが、APIでは認証のためにdeviseを実装する方法を示します。

gem 'devise_token_auth'

誰かがこの宝石を認証に好むが、そのために利用できるチュートリアルはありません。 Rails apiで認証を実装する方法は?

18
user5496955

devise_token_authを使用したAPI認証 に関する優れたチュートリアルを以下に示します。また、 devise_token_auth gemのgithubページ には、始めるのに役立つ非常に優れたドキュメントがあるようです。

関連する概念を理解するための優れたチュートリアルを探している場合は、トークンベースの認証を使用してRails AP​​Iを作成する完全なウォークスルーがある here is one を使用してください(_devise_token_auth_、しかし概念を理解するのに役立ちます)。

また、大規模なRails AP​​Iで非常にうまく機能する JWT(JSON Web Token) もご覧になることをお勧めします。これは、ビルド方法を説明する別のチュートリアルです JWTでバックアップされたRails API

17

あなたができる最善のことは、最新である可能性が最も高い github tutorials に従うことです。

最初に [〜#〜] tldr [〜#〜] の部分に従う必要があります。
フロントエンドの開発者は 使用法の仕様 について知っておく必要があることに注意してください。
最後に、ドキュメントを確認します。役立つサンプルを以下に示します。

ルート

Rails.application.routes.draw do

  # Stuff
  devise_for :admin_users, ActiveAdmin::Devise.config
  ActiveAdmin.routes(self)
  devise_for :users
  root to: "home#index"

  # The API part
  namespace :api, defaults: {format: :json} do
    scope :v1 do
      mount_devise_token_auth_for 'User', at: 'auth', skip: [:omniauth_callbacks]
      resources :stuff, only: [:index, :show]
    end
  end
end

コントローラ

module Api
  class StuffsController < ApiController
    before_action :authenticate_user!
    ...
  end
end

APIコントローラ

class ApiController < ApplicationController
  include DeviseTokenAuth::Concerns::SetUserByToken
end

ユーザーモデル

class User < ActiveRecord::Base
  # Include default devise modules.
  devise :database_authenticatable, :registerable,
          :recoverable, :rememberable, :trackable, :validatable
  include DeviseTokenAuth::Concerns::User
end

最後に、対応するイニシャライザでgemを構成することを忘れないでください。

17
rdupz

"authentication_token"属性をテーブルに追加して、このgemを使用できます。

https://github.com/robertomiranda/has_secure_token

application_controller:

def authenticate_user!
  authenticate_user_from_token!
  super
end


def authenticate_user_from_token!
  User.find_by_authentication_token(user_token)
end

def user_token
  request.headers['X-AUTH-TOKEN'].presence || params['auth_token'].presence
end
4
Artem Biserov

現在のプロジェクトでは simple_token_authentication を実装しています。実装と使用も非常に簡単です。

以下をGemfileに追加してbundle installを実行してください

gem 'simple_token_authentication', '1.12.0'

残りのステップはすべてそのドキュメントに記載されており、非常に簡単に従うこともできます。

2
Jagjot