【问题标题】:custom authentication with devise for an API使用 API 设计的自定义身份验证
【发布时间】:2012-01-29 20:28:07
【问题描述】:

所以我在这里有一个有点棘手的组合

Company has many Users
User belongs to Company

使用设计管理用户以进行身份​​验证

class User < ActiveRecord::Base

  belongs_to :company

  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

您可以作为用户登录并创建所有属于该公司而不是用户的对象,例如:Text。 (company.texts)

现在我使用 acts_as_api gem 创建了一个简单的 API。 为此,我只需要修改我的文本控制器 f.e.表演动作。

class TextsController < ApplicationController

  load_and_authorize_resource

  def show
    #@text = Text.find(params[:id])
    respond_to do |format|
      format.html
      format.json { render_for_api :texts_all, :json => @text }
    end

这在网站上工作得很好。 问题是API。通过用户模型访问 api 时,我不想进行身份验证。该公司确实有一个名为:hash的属性,我想在 API 中将其用于身份验证。

我不知道如何使用设计(或任何其他方法)来实现这一点。 所以默认情况下,设计希望用户登录,因为我的控制器中的 load_and_authorize_resource 对 html 响应很好,但对 json 响应没有。

有什么想法吗?

感谢您阅读本文。如果有不清楚的地方,请发表评论!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 api authentication devise


    【解决方案1】:

    只需使用 Token Authenticatable 并将令牌与 API 上的每个请求一起发送。

    Here is a tutorial for it.

    【讨论】:

    • 我也看到了这个,但令牌来自不是设计模型的公司。
    • 链接失效
    【解决方案2】:

    根据接受的格式标头有条件地应用身份验证过滤器:

    # override in controllers related ot API
    def authenticate_user!
      respond_to do |format|
        format.html { super } # just like before
        format.json { enforce_api_auth }
      end
    end
    

    现在 API 调用强制执行自己的身份验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 2016-03-15
      • 1970-01-01
      • 2020-04-01
      • 2022-12-10
      • 2012-02-09
      • 2014-11-15
      相关资源
      最近更新 更多