2014-02-02 4 views
0

Я подталкиваю свое приложение к герою, и кажется, что пользовательский вход не сохраняется. Я думаю, что это потому, что у меня есть пользовательское имя_потока, которое я использую для извлечения пользователя в сеансах, но оно просто не сохраняется.Rails, пользователь remember_token не сохраняется?

В моей модели пользователя у меня есть

before_save :create_remember_token 

и это метод, определенный

def create_remember_token 
     self.remember_token = SecureRandom.urlsafe_base64 
    end 

Но когда я создаю модели в консоли, я получаю remember_token: ноль даже после сохранения.

Мой знак в методе в моем sessionshelper и он работает как этот

def sign_in(user) 
     cookies.permanent[:remember_token] = user.remember_token 
     self.current_user = user 
    end 

def current_user=(user) 
    @current_user = user 
end 

def current_user 
    @current_user ||= User.find_by_remember_token(cookies[:remember_token]) 
    end 
def sign_out 
     current_user.update_attribute(:remember_token, 
            User.encrypt(User.new_remember_token)) 
     cookies.delete(:remember_token) 
     self.current_user = nil 
    end 

Я новичок в рельсах и Heroku поэтому любые идеи к проблеме была бы оценена!

+0

Одна ошибка, которую я могу заметить, заключается в том, что вы меняете 'remember_token' каждый раз, когда пользователь сохраняется, но значение cookie не обновляется. Вам не нужно изменять атрибут, отличный от входа/выхода. Также обратите внимание, что в этом коде 'remember_token' передается в ясном тексте, что небезопасно. –

ответ

0

Для того, чтобы определить, в чем проблема, временно:

Заменить

before_save :create_remember_token 

С

after_save :create_remember_token 

И

def create_remember_token 
    self.remember_token = SecureRandom.urlsafe_base64 
end 

С

def create_remember_token 
    self.update_column(:remember_token, SecureRandom.urlsafe_base64) 
end 

Что делает ваш код: Создать нового пользователя в памяти. Перед тем, как этот пользователь будет сохранен, установите значение параметра_по_о_пользователя. Затем вызывается метод сохранения. Я предполагаю, что вы не позволили remember_token через сильные параметры, поэтому значение remember_token не сохраняется в базе данных.

Что делает мой код: Создайте нового пользователя в памяти. После того, как этот пользователь будет сохранен, непосредственно измените значение пользователя remember_token в базе данных. Это позволит обойти проблему сильных параметров, если это действительно проблема. Я бы не рекомендовал использовать это как постоянное исправление. Вместо этого вернитесь к исходному коду, перейдите в SessionController и найдите область, в которой указано params.require (хеш, отправляемый) .permit (разрешенные параметры). Это ваши сильные параметры, и именно здесь вам нужно разрешить запоминание токена. Добавить: remember_token в области разрешения.

+0

А, я включил remember_token в список attr_accessible, но пользователь все еще не может войти. Не знаю, почему это работает на локальной машине, но не в геройку. Любые другие идеи? Благодаря! – google1254

+0

Локально вы можете создавать нового пользователя с нуля, и все работает по назначению? – FCStrike

+0

Да, локально я получаю пользовательский вход, чтобы упорствовать по какой-либо причине – google1254

Смежные вопросы