Передача хэша Params в Rails Helper - PullRequest
0 голосов
/ 11 марта 2012

У меня есть SessionsHelper, где я определяю current_user:

module SessionsHelper
  def current_user
    @current_user ||= user_from_remember_token 
  end
  .
  .
  .
  private
  def user_from_remember_token
    User.authenticate_with_salt(*remember_token)
  end

  def remember_token
    cookies.signed[:remember_token] || [nil, nil]
  end
end

У меня есть UsersController, который имеет before_filter :authenticate.Эта аутентификация находится в SessionsHelper, и здесь у меня проблемы.

Rails обрабатывает все файлы cookie для меня, но я создал API для использования токенов для моего мобильного приложения, для которого я должен отправитьparams[:api_token] при входе в систему и установке current_user.

Я думаю, что должен сделать что-то вроде:

def current_user
  @current_user ||=(user_from_remember_token || user_from_api_token)
end

, но я застрял, потому что не уверен, что смогу пройтиparams[:api_token] в помощнике.

Может кто-нибудь указать мне правильное направление?

РЕДАКТИРОВАТЬ: У меня также есть,

class ApplicationController < ActionController::Base
  protect_from_forgery

  include SessionsHelper

  ...
end

, который позволяет мне использовать before_filter: authenticate от UsersController и доступ к этому методув SessionsHelper

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

Если вы включаете SessionsHelper в UsersController , методы, определенные в SessionsHelper , должны иметь доступ к params .

0 голосов
/ 11 марта 2012

Если вы определяете что-то в помощнике, которое должно быть доступно для всех представлений, вы должны поместить это в ApplicationHelper.

Кроме того, я думаю, вы захотите использовать эти методы в своих контроллерах в некоторых случаях.точка.Поэтому вы действительно должны определить их в ApplicationController, а затем пометить их как вспомогательные методы с помощью функции helper_method.

Вот пример:

class ApplicationController < ActionController::Base
  protect_from_forgery

  before_filter :authenticate

  private

  def authenticate
    redirect_to root_url, :alert => 'You must log in to access this page' unless current_user
  end

  def current_user
    @current_user ||= User.find_by_auth_token(cookies[:auth_token]) if cookies[:auth_token]
  end
  helper_method :current_user
end

Тогда нет необходимости передавать параметры где-либо, посколькуApplicationController имеет прямой доступ к нему.

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