2013-11-20 114 views
3

我有一個應用程序與寶石設計。我需要通過電子郵件確認註冊。在到config/environment.rb我加入這個Rails 4與MailCatcher和設計寶石

ActionMailer::Base.delivery_method = :smtp 
ActionMailer::Base.smtp_settings = { 
    :address => "smtp.gmail.com", 
    :port => 587, 
    :domain => "gmail.com", 
    :authentication => 'plain', 
    :user_name => "[email protected]", 
    :password => "mypassword" 
} 

配置/環境/ development.rb補充說:

config.action_mailer.default_url_options = { :host => 'localhost:3000' } 
    config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { :address => "127.0.0.1", :port => 1025 } 

我想寶石捕捉所有電子郵件MailCatcher 但當我提交發送確認說明時,mailcatcher gem中沒有任何反應。但在控制檯我有類似的東西:

Sent mail to [email protected] (3757.4ms) 
Date: Thu, 21 Nov 2013 01:19:45 +0400 
From: [email protected] 
Reply-To: [email protected] 
To: [email protected] 
Message-ID: <[email protected]> 
Subject: Confirmation instructions 
Mime-Version: 1.0 
Content-Type: text/html; 
charset=UTF-8 
Content-Transfer-Encoding: 7bit 

<p>Welcome [email protected]!</p> 

<p>You can confirm your account email through the link below:</p> 

<p><a href="http://localhost:3000/users/confirmation?confirmation_token=hnrgdXgv4nARwiAzaXFy">Confirm my account</a></p> 

Redirected to http://localhost:3000/users/sign_in 
Completed 302 Found in 4648ms (ActiveRecord: 59.8ms) 

而且在mailcathcer NOTHING。怎麼了?

+1

如果您刪除了添加到「config/environment.rb」中的設置,會發生什麼情況?你不應該需要這些。 – Ashitaka

+0

@Ashitaka,謝謝。從config/environment.rb中刪除configs後,mailcatcher開始工作。 –

回答

0

這也發生在我身上。我跟着這些玩具How do I set up email confirmation with Devise?。事實證明,我忘記取消對設計遷移中的confirmation_token外鍵的註釋。之後,我放棄並重新創建數據庫,並且工作正常!

因此,當您生成設計模型時,它將創建以下遷移,並具有相應的範圍。

class DeviseCreateUsers < ActiveRecord::Migration 
    def change 
    create_table(:users) do |t| 
     ## Database authenticatable 
     t.string :email,    null: false, default: "" 
     t.string :encrypted_password, null: false, default: "" 

     ## Recoverable 
     t.string :reset_password_token 
     t.datetime :reset_password_sent_at 

     ## Rememberable 
     t.datetime :remember_created_at 

     ## Trackable 
     t.integer :sign_in_count, default: 0, null: false 
     t.datetime :current_sign_in_at 
     t.datetime :last_sign_in_at 
     t.inet  :current_sign_in_ip 
     t.inet  :last_sign_in_ip 

     ## Confirmable 
     # t.string :confirmation_token 
     # t.datetime :confirmed_at 
     # t.datetime :confirmation_sent_at 
     # t.string :unconfirmed_email # Only if using reconfirmable 

     ## Lockable 
     # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts 
     # t.string :unlock_token # Only if unlock strategy is :email or :both 
     # t.datetime :locked_at 


     t.timestamps null: false 
    end 

    add_index :users, :email,    unique: true 
    add_index :users, :reset_password_token, unique: true 
    # add_index :users, :confirmation_token, unique: true 
    # add_index :users, :unlock_token,   unique: true 
    end 
end 

要主動確認功能,則必須取消以下模塊:

​​

add_index :users, :confirmation_token, unique: true 

這應該使電子郵件出現在MailCatcher。

祝您好運:)