基于令牌的Rails JSON API认证如何实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (83)

我在rails中制作API。对于正常的身份验证,我们使用设计,但在API中如何实现身份验证。

gem 'devise_token_auth'

有人喜欢这个gem进行身份验证,但没有可用的教程。如何在rails api中实现authenitication?

提问于
用户回答回答于

这是一个关于使用devise_token_auth进行API认证的很好的教程。另外,devise_token_auth gem的github页面似乎有一个很好的文档,可以帮助你开始。

如果你正在寻找一个很好的教程来理解相关的概念,下面是一个彻底的演示,用基于令牌的认证创建一个Rails API(不使用devise_token_auth,但有助于理解概念)。

我还建议你看一看JWT(JSON Web Token),它适用于大规模的Rails API。这里是另一个教程,解释如何构建支持JWT的Rails API

用户回答回答于

你可以做的最好的事情是遵循最有可能是最新的github教程

首先你应该遵循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。

扫码关注云+社区