Руби на рельсы веб-приложение и API бок о бок проблема - PullRequest
0 голосов
/ 02 декабря 2018

Я новичок в Ruby на рельсах.Мне нужно поддерживать проект, который представляет собой законченное веб-приложение.Теперь мне нужно ввести в него API.Я искал и получил много учебников по API и веб-приложениям по отдельности.Но никто из них не показал, как эти вещи будут работать вместе.Я запутался, как эта аутентификация будет работать для обоих.Вот application_controller.rb:

class ApplicationController < ActionController::Base
  helper_method :sort_column, :sort_direction

  protect_from_forgery

  before_filter :authenticate_user!
  # before_filter :authenticate # HTTP AUTH DISABLED

  rescue_from CanCan::AccessDenied do |exception|
    render :file => "#{Rails.root}/public/403.html", :status => 403, :layout => false
    ## to avoid deprecation warnings with Rails 3.2.x (and incidentally using Ruby 1.9.3 hash syntax)
    ## this render call should be:
    # render file: "#{Rails.root}/public/403", formats: [:html], status: 403, layout: false
  end  

  def user_for_paper_trail
    if user_signed_in?
      current_user.full_name
    end
  end

  def info_for_paper_trail
    if user_signed_in?      
      { :user_id => current_user.id }
    end
  end    

  protected
  def authenticate
    authenticate_or_request_with_http_basic do |username, password|
      username == "admin" && password == "123"
    end
  end  

end

Мне нужно знать, как аутентифицировать API?Если я использую JWT, то как переопределить методы sign_in и делать все это отдельно для API, и это также выглядит для меня накладными расходами, поскольку аутентификация уже есть.Кроме того, было бы полезно узнать, как задействовать функции API в контроллере?Как у меня есть пользовательский контроллер и все методы для этого для веб-приложения.Теперь мне нужны те же методы для API.Поэтому мне нужно сделать новый контроллер для API или этот контроллер можно использовать?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Для меня сработало решение - использовать дружественный токен с devise_token_auth для API.А вот мой фильтр сейчас:

before_filter do
if check_api_request
  authenticate_api_request
else
  authenticate_user!
end

end

0 голосов
/ 02 декабря 2018

Здесь много вопросов, поэтому я попытаюсь дать общий ответ:

В общем, другие контроллеры наследуются от ApplicationController, который (в вашем случае) запускает before_filter.Фильтр может перенаправлять или отображать и, следовательно, предотвращать выполнение определенного маршрута.Поскольку все контроллеры наследуются от ApplicationController, фильтр запускается перед каждым действием вашего приложения (при условии наиболее распространенного случая по умолчанию).

Предположительно, аутентификация API должна работать не так, как для html-интерфейса приложения.(возможно, ключ API в заголовке).Похоже, что ваше приложение использует https://github.com/plataformatec/devise. Я бы посмотрел на него, чтобы посмотреть, сможете ли вы просто "включить" подходящий метод аутентификации для вашего API с его помощью.

Я надеюсь, что этопомогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...