rails4.2~devise邮箱测试
1.由于网站无需验证,只需一封欢迎邮件,在config/intiailzers/devise.rb里面配置
config.allow_unconfirmed_access_for = nil #2.days
2.配置user--编辑app/models/user.rb文件,先写一下数据这一块
class User < ActiveRecord::Base # Include default devise modules. Others available are: # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, #末尾添加,号 :confirmable, :lockable #添加这一行 # Setup accessible (or protected) attributes for your model attr_accessible :email, :password, :password_confirmation, :remember_me end
## 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 # Only if lock strategy is :failed_attempts t.string :unlock_token # Only if unlock strategy is :email or :both #去掉首位注释#号 t.datetime :locked_at #去掉首位注释#号 -----------------------------.
发现报错
rake aborted!
NoMethodError: undefined method `attr_accessible' for User (call 'User.connection' to establish a connection):Class
之后百度找到
http://stackoverflow.com/questions/23743603/undefined-method-attr-accessible-error-for-user
attr_accessible
is not available for Rails version 4+
. You would have to go with strong parameters.
With Strong Parameters, attribute whitelisting has been moved to controller level. Remove the attr_accessible
call from your model.
Here is an example in Rails Guide of how to use Strong Parameters
In your case you can do something like this:
class UsersController < ApplicationController ## ... def create @user = User.new(user_params) ## Invoke user_params method if @user.save redirect_to @user, notice: 'User was successfully created.' else render action: 'new' end end ## ... private ## Strong Parameters def user_params params.require(:user).permit(:name, :password_digest, :password, :password_confirmation) end end
之后就删除了attr_accessible
:email
,
:password
,
:password_confirmation
,
:remember_me
end
config.mailer_sender = 'XXXXXXXX@qq.com' #将邮件服务器地址写成自己的邮箱,作为发送方邮件
3.编辑/config/application.rb,将下列代码添加到class Application < Rails::Application中即可,本人使用的是qq邮箱发送,需要提前去qq邮箱里面打开相应的smtp服务
config.action_mailer.raise_delivery_errors = true #注意,在development.rb下需修改成true
#添加如下几行代码
config.action_mailer.default_url_options = { :host => "localhost:3000" } #提示中有提到需要配置,即执行rails g devise:install
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.qq.com",
:port => 25,
:domain => "qq.com", #qq.com
:authentication => :login,#几种认证方式:plain,直接传递;login,Base64码传递;cram_md5,md5加密传递
:user_name => "xxxxxxx@qq.com", #修改邮箱
:password => "xxxxxxxx" #修改正确的密码 }
4.本人是用qq测的,所以也按照上面的方法,但还是不行,页面报错535 Authentication failed
百度了半天还是不行,后来看到了 https://ruby-china.org/topics/8918 这个帖子
看到企业邮箱是加了@XXX.com,那我这个是个人的邮箱,应该不需要就删掉了这些.....
然后ctrl+C关闭rails服务器,然后rake db:migrate:reset,重新注册用户....居然发送成功了,来张截图