0

我创建新用户。创建后应该会收到确认邮件。但是当我打开mailcatcher(http://127.0.0.1:1080/)......什么都没有!

我使用 mailcatcher v. 0.5.12,Rails 3.2.22

在 development.rb 中添加:

# Don't care if the mailer can't send
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 }
  config.action_mailer.raise_delivery_errors = true 

设置有什么问题?如何检查错误?请帮忙,谢谢。

更新

确认控制器:

class ConfirmationsController < Devise::ConfirmationsController

  def new
    super
    resource.login = current_user.email if user_signed_in?
  end

  protected

  def after_resending_confirmation_instructions_path_for(resource_name)
    if user_signed_in?
      home_path
    else
      new_session_path(resource_name)
    end if is_navigational_format?
  end

  # The path used after confirmation.
  def after_confirmation_path_for(resource_name, resource)
    '/profile'
  end
end

用户控制器.rb:

# encoding: utf-8
class UsersController < ApplicationController
  before_filter :require_admin, only: [:add_moderator, :remove_moderator, :destroy]
  before_filter :require_moderator, only: [:edit, :update, :paid_on, :paid_off,
                                           :ban, :unban]
  before_filter :authenticate_user!, except: [:new, :create]
  before_filter :load_user, only: [:show, :photos, :videos, :audios,
                                   :buy_rating, :do_buy_rating,
                                   :add_moderator, :remove_moderator,
                                   :edit, :update, :paid_on, :paid_off, :ban, :unban, :destroy,
                                   :add_funds, :mute, :unmute]

  layout :determine_layout

  def new
    @user = User.new
    @invite = Invite.find_by_code(session[:invite]) if session[:invite].present?
    @user.email = @invite.email if @invite
  end

  def create
    @user = User.new(params[:user])
    raise ActiveRecord::RecordInvalid.new(@user) unless verify_recaptcha(model: @user, message: 'message')
    @invite = Invite.find_by_code(session[:invite]) if session[:invite].present?
    User.transaction do
      @user.save!
      @user.current_password = @user.password
      @user.theme_ids = params[:user][:theme_ids]
      @user.group_ids = [114, 130] 
      @user.save!
    end
    if @invite
      @invite.new_user = @user
      @invite.use!
    end
    redirect_to @user
  rescue ActiveRecord::RecordInvalid
    render :new
  end

  .........................................................
  .........................................................

private

  def determine_layout
    return 'welcome' if %w(new create).include?(params[:action])
    return 'dating' if params[:action]=='search'
    'inner'
  end
end

注册控制器.rb:

# encoding: utf-8
class RegistrationsController < Devise::RegistrationsController
  def create
    if verify_recaptcha
      super
    else
      flash.delete :recaptcha_error
      build_resource
      resource.valid?
      resource.errors.add(:base, :invalid_recaptcha)
      # clean_up_passwords(resource)
      render :new
    end
  rescue ActiveRecord::RecordNotUnique
    render :new
  end

  def update
    redirect_to '/settings'
  end
  # def update
  #   # required for settings form to submit when password is left blank
  #   if params[:user][:password].blank?
  #     params[:user].delete("password")
  #     params[:user].delete("current_password")
  #   end
  # 
  #   @user = User.find(current_user.id)
  #   if update_user
  #     set_flash_message :notice, :updated
  #     # Sign in the user bypassing validation in case his password changed
  #     sign_in @user, :bypass => true
  #     redirect_to after_update_path_for(@user)
  #   else
  #     render "edit"
  #   end
  # end

  def edit
    redirect_to '/settings'
  end

  def destroy
    current_password = params[:user].delete(:current_password)
    if resource.valid_password?(current_password)
      resource.mark_as_deleted!
      render inline: "$('body').fadeOut(3000, function() { document.location = 'http://ya.ru'; })"
    else
      render inline: "$.flash.error('error')"
    end
    # Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
    # set_flash_message :notice, :destroyed if is_navigational_format?
    # respond_with_navigational(resource){ redirect_to after_sign_out_path_for(resource_name) }
  end

  protected

  def after_sign_up_path_for(resource)
    '/profile'
  end

end
4

1 回答 1

0

代码没有 Devise.mail_confirmation_instructions(@user).deliver。我意识到,现在一切都很好

于 2015-07-21T18:44:27.220 回答