Ruby on rails 什么是utf8=✓&;真实性令牌以及为什么它会与邮件表单gem产生冲突?
我正在使用mail_form gem和sendgrid作为我的电子邮件联系人表单。但是当我填写表单并发送消息时,它不会成功发送。通过发送消息,它应该将用户带到另一个页面,在该页面上显示感谢您的消息 我得到这个utf8=✓&我的url和heroku日志中的真实性令牌。我认为这就是造成这个问题的原因。你们能帮帮我吗Ruby on rails 什么是utf8=✓&;真实性令牌以及为什么它会与邮件表单gem产生冲突?,ruby-on-rails,ruby,heroku,utf-8,mail-form,Ruby On Rails,Ruby,Heroku,Utf 8,Mail Form,我正在使用mail_form gem和sendgrid作为我的电子邮件联系人表单。但是当我填写表单并发送消息时,它不会成功发送。通过发送消息,它应该将用户带到另一个页面,在该页面上显示感谢您的消息 我得到这个utf8=✓&我的url和heroku日志中的真实性令牌。我认为这就是造成这个问题的原因。你们能帮帮我吗 2016-01-10T17:49:47.934925+00:00 app[web.1]: Started GET "/contacts/new?utf8=%E2%9C%93&au
2016-01-10T17:49:47.934925+00:00 app[web.1]: Started GET "/contacts/new?utf8=%E2%9C%93&authenticity_token=mzcayVlHayBSxoka6pnUQdjz7OxaPlFICU7L%2FJlfZU4NmyiLypTSbcgaJ%2BRSLZdmhYW3NaxMrZoL0Khwr%2FiRfA%3D%3D&contact%5Bname%5D=Brandon+Espinoza&contact%5Bemail%5D=espinozabrand%40gmail.com&contact%5Bmessage%5D=Hi+how+are+you+msg+me+back+asap+pls&contact%5Bnickname%5D=&commit=Yes%21+Send+It%21" for 71.9.177.97 at 2016-01-10 17:49:47 +0000
2016-01-10T17:49:47.950056+00:00 app[web.1]: Completed 200 OK in 10ms (Views: 9.1ms | ActiveRecord: 0.0ms)
2016-01-10T17:49:47.939506+00:00 app[web.1]: Processing by ContactsController#new as HTML
2016-01-10T17:49:47.939670+00:00 app[web.1]: Parameters: {"utf8"=>"✓", "authenticity_token"=>"mzcayVlHayBSxoka6pnUQdjz7OxaPlFICU7L/JlfZU4NmyiLypTSbcgaJ+RSLZdmhYW3NaxMrZoL0Khwr/iRfA==", "contact"=>{"name"=>"Brandon Espinoza", "email"=>"espinozabrand@gmail.com", "message"=>"Hi how are you msg me back asap pls", "nickname"=>""}, "commit"=>"Yes! Send It!"}
2016-01-10T17:49:47.947225+00:00 app[web.1]: Rendered contacts/new.html.erb within layouts/application (6.0ms)
这是我的联系人_controller.rb:
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact])
@contact.request = request
if @contact.deliver
flash.now[:error] = nil
else
flash.now[:error] = 'Cannot send message.'
render :new
end
end
end
以下是我的路线:
Rails.application.routes.draw do
resources :posts
resources :projects
resources :contacts, only: [:new, :create]
get 'welcome/index'
root 'welcome#index'
end
这应该回答您关于
utf8
和authenticity\u token
字段的问题的第一部分:
:
这段代码没有显示在浏览器中,是Rails内部使用的,因此了解它的功能对我们来说并不重要。简单地说,它使用Unicode字符✓ (复选标记✓) 强制浏览器使用正确的字符编码提交数据,然后它包含一个真实性令牌,Rails使用该令牌阻止称为跨站点请求伪造(CSRF)的攻击
虽然我还没有使用这个gem,但是您可以启动一个控制台并在那里测试交付吗?这应该可以:
c = Contact.new
c.email = "your@email.com"
c.name = "Your Name"
c.message = "Test Subject"
c.deliver
更新:
您的日志没有显示任何错误。我想您有问题:
c.errors
flash替换。现在[:error]=nil
为flash。现在[:notice]='Thankyou your message!'
。如果您想要一个专用页面,您需要该页面、重定向和相应的路径我找到了这个问题的解决办法。以上两种方法都不能解决这个问题 由于某些原因,引导中的表单标记正在创建冲突。因此,只需从引导中取出
标记,表单就可以提交
所以表单应该是这样的
为什么不打个招呼
“30”,:占位符=>“您的邮件”,:行=>“10”%>
requestin@contact.request=request
从哪里来?@spickermann来自邮件表单gem。这是该gem的文档。@mackenzie child你能帮我一下吗?这几乎肯定不是问题。你可以尝试检查@contact.error这会把网站搞砸吗?因为我只是为生产联系人设置电子邮件表单及其功能。新建将返回一个尚未保存到数据库的新联系人对象。我不知道deliver
方法做什么,你能发布相关的代码吗?在任何情况下,你都可以在退出控制台时使用rails控制台--sandbox
回滚对数据库的任何更改。如果一切顺利,将向指定的电子邮件发送一封电子邮件。MailForm::Notifier#联系人:254.3m处理出站邮件s发邮件到espinozab100@gmail.com(13.7毫秒)日期:2016年1月12日星期二13:53:40-0600从:布兰登到:espinozab100@gmail.com消息ID:主题:联系人表单Mime版本:1.0内容类型:text/html;charset=UTF-8内容传输编码:7bit联系人表单名称:Brandon电子邮件:espinozab100@gmail.com信息:受试者=>事实就是这样enedPlease请尝试更清楚地了解您尝试过的内容、正在发生的事情以及您的问题。请参阅我上面的编辑,以获取一些提示。
config.action_mailer.default_url_options = { host: 'https://espinozabrandblog.herokuapp.com/' }
config.action_mailer.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => 'smtp.sendgrid.net',
:port => '587',
:authentication => :plain,
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:domain => 'heroku.com',
:enable_starttls_auto => true
}
Rails.application.routes.draw do
resources :posts
resources :projects
resources :contacts, only: [:new, :create]
get 'welcome/index'
root 'welcome#index'
end
c = Contact.new
c.email = "your@email.com"
c.name = "Your Name"
c.message = "Test Subject"
c.deliver
<div class="container">
<div class="row">
<div class="col-md-12">
<h3 class="page-titles">Why Not Say Hello</h3>
</div>
</div>
<div class="row">
<div class="col-md-6 center-block">
<%= form_for @contact do |f| %>
<div class="form-group">
<%= f.label :name %>
<%= f.text_field :name, required: true, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :email %>
<%= f.email_field :email, required: true, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :message %>
<%= f.text_area :message, as: :text, class: "form-control", :cols => "30", :placeholder => "Your Message", :rows => "10" %>
</div>
<div class="form-group hidden">
<%= f.label :nickname %>
<%= f.text_field :nickname, hint: 'leave this field blank' %>
</div>
<%= f.submit 'Yes! Send It!', class: " btn-default btn sendbtn" %>
<%end%>
</div>
</div>