2011-09-26 6 views
2

"활성화"되기 전에 또는 이메일/비밀번호로 로그인하기 전에 사용자가 활성화 링크를 클릭하기를 원합니다.레일 - 사용자 가입시 이메일 활성화

나는 보석을 사용하지 않고 있으며 그렇게하고 싶습니다. 내 문제는 사용자가 등록한 후에 활성화 코드를 클릭하지 않고 로그인 할 수 있다는 것입니다. 나는 confirm_token 라인과 확인 된 라인을 모델에 가지고있다.

사용자 컨트롤러 :

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

난 아무것도 실종 :

사용자 모델

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 

끝? 감사!

나는 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 
+0

무엇이 오류입니까? – emrahbasman

+0

사용자는 가입하고 전자 메일 주소를 확인하기 위해 활성화 링크를 클릭하지 않고 로그인하여 사이트 사용을 시작할 수 있습니다. – noob

+0

사용자가 로그인 할 때 새 세션을 만드는 데 사용되는 코드를 게시하십시오. – drummondj

답변

2

물론 많은 시련과 고난 끝에, 나는 그것을 알아 낸 것입니다. 이전에는 암호를 확인하는 경로로 암호를 보내는 대신 암호를 편집 할 수있는 새 컨트롤러로 경로를 리디렉션했습니다. 어리석은 실수는 나에게 많은 두통을 안겨 줬지만, 살아 있고 배우기. 들여다 본 모든 사람들에게 감사드립니다.

0

.

기본적으로 문제는 사용자가 로그인했는지 여부를 확인하지 않고 확인하는 것입니다. 한 가지 방법은 세션 생성 메소드 내부에이를 추가하는 것입니다.

if user && user.confirmed? 

가장 좋은 방법은하지만 그런 다음이

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

당신이 현재 사용자에 대해 확인하는 authenticate 방법을 다음 CURRENT_USER 만이 될 수 있다고 로직이 같은 필터를 사용하는 아마 확인 된 사용자. 이렇게하면 로그인 할 때만이 아니라 필요한 모든 페이지에서 사용자가 유효한지 확인합니다.

+0

나는 코드를 가지고 놀았으며, 확인되었는지 확인하기 위해 코드를 포함시켰다. 문제는 링크를 클릭하면 확인 된 부울을 false에서 true로 변경하지 않는다는 것입니다. 그것은 거짓으로 남습니다. – noob

+0

확실한 타격을 '확인'했습니까? 디버거를 던지기를 원할 수도 있습니다. 이메일 링크에서 확인 코드로 이동하는 것은 까다로운 부분입니다. 또는 콘솔을로드하고 새 사용자를 만든 다음 확인을 요청하십시오! 그의 위에. – cbron