rails - активация электронной почты при регистрации пользователя - PullRequest
2 голосов
/ 27 сентября 2011

Я хочу, чтобы пользователь щелкнул ссылку активации перед тем, как "активироваться" или прежде чем он сможет войти в систему с помощью адреса электронной почты / пароля.

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

пользовательский контроллер:

def create
  @user = User.new(params[:user])
 if @user.save
  render "root_path"
 else
  render "new"
 end
end

def confirmed
 user = User.find(:first, :conditions => {:confirmation_token => params[:confirmation_token]})
 if (!params[:confirmation_token].blank?) && user && !user.confirmed?
  user.confirmed!
  self.current_user = user
  flash[:notice] = "Thank you.  You account is now activated."
  redirect_to account_preference_path(current_user)
 else
  flash[:notice] = "Sorry we don't have your email in our database."
  redirect_to root_path
 end

end

пользовательская модель:

def confirmed!
 self.confirmed = true
 self.confirmation_token = nil
 save(false) 
end

Я что-то пропустил?Спасибо!

Я знаю, что есть такие гемы, как devise, auth-logic и т. Д., Но я хочу научиться писать их с нуля.Спасибо.

РЕДАКТИРОВАТЬ:

контроллер сессии

def create
 user = User.authenticate(params[:email], params[:password])
 if user && user.confirmed == true
  cookies.permanent.signed[:remember_token]
  redirect_to account_path(user.id), :notice => "Welcome, #{user.first_name}"
 else
  flash.now.alert = "Invalid email or password."
  render "new"
 end
end

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

Конечно, после долгих испытаний и скорбей я понял это.Раньше я перенаправлял маршруты на новый контроллер, где они могли редактировать свой пароль, а не просто отправлять их на маршрут, который просто подтверждает код.Глупая ошибка, которая стоила мне много головной боли, но жить и учиться.Спасибо всем, кто заглянул в него.

0 голосов
/ 27 сентября 2011

Возможно, вы захотите поискать некоторые учебные пособия, чтобы хотя бы провести вас через этот процесс, вы лучше почувствуете правильность кодирования рельсов.

В основном ваша проблема заключается в том, что вы не выполняете проверку, чтобы убедиться, подтвержден ли пользователь при входе в систему.Одним из способов было бы добавить это в ваш метод создания сеанса.

if user && user.confirmed? 

Лучшее решение, хотя, вероятно, это использовать фильтры, подобные этому

 before_filter :authenticate, :only => [:new, :create, :edit, :destroy]

Тогда у вас есть метод authenticateкоторый проверяет текущего пользователя, а затем имеет логику, которая говорит, что current_user может быть только подтвержденным пользователем.Это проверит, что пользователь действителен на всех страницах, которые ему нужны, а не только при входе в систему.

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