Как сообщить контроллеру приложений, что пользователь выполнил вход (пользователи обрабатываются с помощью devise) - PullRequest
0 голосов
/ 12 января 2012

Я использую Devise для работы с пользователями в приложении для покупок.Я хочу создать новую корзину каждый раз, когда пользователь входит в систему (и в идеале, уничтожать одну и ту же корзину каждый раз, когда пользователь выходит из системы, но я просто придерживаюсь этой первой части для этого вопроса).

До сих пор я смотрел на этот вопрос: Разработать обратные вызовы

И я придумал это:

class ApplicationController < ActionController::Base
  helper :all
  protect_from_forgery

  before_filter :fetch_categories

  .
  .
  .

  Warden::Manager.after_authentication do
    session[:cart_id] ||= Cart.create!.id
  end
end

... Но ясно этоне правильно, потому что я получаю эту ошибку:

NameError in Devise::SessionsController#create

undefined local variable or method `session' for ApplicationController:Class

Есть ли какой-то другой способ, которым я могу сказать контроллеру приложения, чтобы он отвечал на вход пользователя, или я должен поместить этот код в другом месте (кроме контроллера приложений)?Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 12 января 2012

Взглянув на документы , похоже, вы можете сделать что-то вроде этого:

Warden::Manager.after_authentication do |user, auth, opts|
  auth.session[:cart_id] ||= Cart.create!.id
end
0 голосов
/ 12 января 2012

Упрощенно напишите перед фильтром

В application controller

before_filter :set_current_user

def set_current_user Authorization.current_user = current_user end

и

выможно проверить во всем приложении

, используя

 ` if !current_user.nil? 

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