4

사용자가 가입 할 때마다 이메일을 보내는 메일러를 만들려고합니다. 아주 간단하지만 나는 레일을 처음 사용합니다.Rails 사용자 등록 메일 확인

나는 이미 사용자를 생성 한 사이트가 있습니다. 나는 제대로 작동하는 로그인 및 가입 페이지를 가지고 있지만, 사용자 확인없이 별도의 페이지를 만드는 것처럼 가입하지 않고 이메일 확인 링크와 아마도 이러한 이메일을 보내는 옵션을 보내는 메일러를 만드는 데 도움이 필요합니다.

나는

class InvitationsController < ApplicationController 
    def new 
    @invitation = Invitation.new 
    end 

    def create 
    @invitation = Invitation.new(params[:invitation]) 
    @invitation.sender = current_user 
    if @invitation.save 
     if logged_in? 
     Mailer.deliver_invitation(@invitation, signup_url(@invitation.token)) 
     flash[:notice] = "Thank you, invitation sent." 
     redirect_to projects_url 
     else 
     flash[:notice] = "Thank you, we will notify when we are ready." 
     redirect_to root_url 
     end 
    else 
     render :action => 'new' 
    end 
    end 
end 

다른 내가 편집해야 않는

class Invitation < ActiveRecord::Base 
    belongs_to :sender, :class_name => 'User' 
    has_one :recipient, :class_name => 'User' 

    validates_presence_of :recipient_email 
    validate :recipient_is_not_registered 
    validate :sender_has_invitations, :if => :sender 

    before_create :generate_token 
    before_create :decrement_sender_count, :if => :sender 

    private 

    def recipient_is_not_registered 
    errors.add :recipient_email, 'is already registered' if User.find_by_email(recipient_email) 
    end 

    def sender_has_invitations 
    unless sender.invitation_limit > 0 
     errors.add_to_base 'You have reached your limit of invitations to send.' 
    end 
    end 

    def generate_token 
    self.token = Digest::SHA1.hexdigest([Time.now, rand].join) 
    end 

    def decrement_sender_count 
    sender.decrement! :invitation_limit 
    end 
    #attr_accessible :sender_id, :recipient_email, :token, :sent_at 
end 

invitation.rb 모델 내 invitiation_controller.rb를 생성 한? 어떻게하면 기존의 사용자 가입 및 로그인에 문제가 없습니까?

답변

1

이미 등록을 위해 그런 UsersController이나 뭔가가 있어야합니다 (확인하기 위해, 당신의 레일 버전에 대한 권리 가이드를 찾을 수 또한 이전 버전에서 작동) 레일 3.1을 사용한다고 가정 현재 signup_url이라는 경로를 통해 액세스하고 있습니다. , 초대 코드없이

def new 
    invite = Invite.find_by_token(params[:id] 

    if invite.nil? 
    redirect_to root_path, :notice => "Sorry, you need an invite to register" 
    end 

    @user = User.new(:email => invite.recipient_email) 

end 

def create 
    invite = Invite.find_by_token(params[:token] 

    if invite.nil? 
    redirect_to root_path, :notice => "Sorry, you need an invite to register" 
    end 

    begin 

    invite.nil.transaction do 
     invite.nil.destroy! 
     @user = User.create(params[:user) 
    end 

    redirect_to my_dashboard_path, :notice => "Yay!" 

    rescue ActiveRecord::RecordInvalid => invalid 
    render :new, :alert => "Validation errors" 
    end 

end 

:

http://localhost:3000/register/code_here 

당신이 지금해야 할 일은 그것을 따라 그래서 같은 컨트롤러 액션에 초대 및 프로세스에 대한 검사입니다 :이 경로는 지금과 같은 것을 가정 단순히 루트 페이지로 리디렉션됩니다. 당신은 그 체크를 마셔야 할 수도 있습니다. 누군가가 초대 코드를 사용하면 데이터베이스에서이를 삭제할 수 있습니다. 나는 그것을 트랜잭션으로 묶었지만, 이것은 당신에게 달렸습니다 (사용자를 생성하는 것이 더 중요 할 수 있습니다). 내가 덮여 경우 잘 모르겠어요

def create 

    @invitation = Invitation.new(params[:invitation]) 
    @invitation.sender = current_user if logged_in? 

    if @invitation.save 

    Mailer.deliver_invitation(@invitation, signup_url(@invitation.token)) 
    flash[:notice] = "Thank you, invitation sent." 

    if logged_in? 
     redirect_to projects_url 
    else 
     redirect_to root_url 
    end 

    else 
    render :action => 'new' 
    end 

end 

: 당신은 사용자가 로그인하지 않고 초대장을 만들 수있는 페이지를 만들려면

, 단순히이 조각을 InvitationsController에 인증을 추가하고 업데이트되지 않습니다 모든 기지,하지만 이것은 올바른 방향으로 최소한 당신을 가리켜 야한다고 생각합니다.

+0

예! 고마워요. 정확히 내가하려고하는 것입니다. 글쎄 그냥 이메일에 당신이 가입했다고 말하는 어떤 것을 보내길 원한다. 어쩌면이 일에 대해 초대장으로 잘못된 방법을 사용하는 것일 수 있습니다. 나는 그들이 가입 할 때 초대장을 보내지 않고, 가입 할 때 확인 이메일을 받는다. 초대장은 나중에 올 수 있습니다. 그래서 만약 내가 단지 확인 이메일을 보내길 원한다면, 나는 (railscast에서) 이미 확인한 이메일을 보내기 위해 만든 동일한 코드를 사용할 수 있습니까? 어디서 내가 뭘하고 내 user_controller에 넣어야합니까? –

+0

예, 두 개의 토큰 (초대장과 등록용으로 하나씩)을 만드는 것이 좋습니다. 이 과정은 확인 이메일 링크를 처리하는 또 다른 조치를 추가 할 수 있다는 점을 제외하면 동일합니다. – Jaryl

1

Mailer.deliver_invitation의 출처가 보이지 않습니다. 보석을 사용합니까? mailer.rb를 만들면 도움이 되겠습니까? 오류 추적이 있습니까?

몇 가지 가이드, 5 액션 메일러 구성이 여기에 보라 http://guides.rubyonrails.org/action_mailer_basics.html

https://github.com/plataformatec/devise 그것은 복잡하지만 잘 설명하고 시작을 뛰어 쉽게 구성, 사용자 인증을 위해 고안 사용하는 것이 좋습니다.

나는, 당신이

+0

devise가이 사이트에 설치되었지만 익숙하지 않고 구성하기 힘들어서이 메일러를 직접 만들려고했습니다. 누군가가 가입 할 때 간단한 자동 전자 메일 확인을 쉽게 설정하는 방법을 고안 한 입력은 큰 도움이됩니다. 빠른 답변을 보내 주셔서 감사합니다. –

+0

첫 번째 시작은 [github] (https://github.com/plataformatec/devise)이고 ** 위키 **입니다.rspec과 오이를 사용하는 또 다른 예가 있지만 그 순간은 건너 뛰므로 [devising customizing] (https://github.com/RailsApps/rails3-devise-rspec-cucumber/wiki/Tutorial)의 튜토리얼을 사용하십시오. - rspec/오이는 아마도 당신을 위해 좋은 것입니다. – vik