簡體   English   中英

Devise Sendgrid和Cancancan:UserRegistrations#create中的NameError

[英]Devise Sendgrid & Cancancan : NameError in UserRegistrations#create

每當我嘗試在Rails應用程序中注冊新用戶時,我總是收到相同的錯誤-我使用Devise進行注冊,使用CanCanCan和Sendgrid通過新用戶的電子郵件發送通知郵件。

新用戶可以注冊,但是會出現錯誤:

NameError in UserRegistrations#create

Showing C:/Users/Adsidera/FreshObst/app/views/user_mailer/welcome.html.erb where line #4 raised:

  undefined local variable or method `user' for #<#<Class:0x5777fb8>:0x5bdac78>

Rails.root: C:/Users/Adsidera/FreshObst
Application Trace | Framework Trace | Full Trace

app/views/user_mailer/welcome.html.erb:4:in `_app_views_user_mailer_welcome_html_erb__1004447735_47859732'
app/mailers/user_mailer.rb:14:in `welcome'
app/controllers/user_registrations_controller.rb:7:in `create'

這是user_registrations_controller.rb

class UserRegistrationsController < Devise::RegistrationsController
before_filter :configure_permitted_parameters

def create
    super
    if @user.persisted?
        UserMailer.welcome(@user).deliver_now
    end
end


protected

# my custom fields are :name, :heard_how
def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) do |u|
    u.permit(:first_name, :last_name,
    :email, :password, :password_confirmation)
end

devise_parameter_sanitizer.for(:account_update) do |u|
    u.permit(:first_name, 
    :email, :password, :password_confirmation, :current_password)
   end
 end
end

這是user_mailer.rb

   class UserMailer < ApplicationMailer
default from: "freshobstuser@yahoo.com"

    def contact_form(email, name, message)
        @message = message
        mail(:from => email, 
            :to => 'freshobstuser@yahoo.com',
            :subject => 'A new contact form message from #{name}' 
            )
    end

   def welcome(user)
       @appname = "FreshObst"
        mail(:to => user.email,
         :subject => "Welcome to #{@appname}!")
   end
 end

這也是我的github的鏈接https://github.com/Adsidera/FreshObst

謝謝! 我對此感到發瘋...安娜

UPDATE!

在Illusionist的建議之后,這個問題似乎已經解決了一半,現在我有了以下日志:

  UserMailer#welcome: processed outbound mail in 83.0ms

Sent mail to dummy@email.com (638.0ms)
Date: Fri, 04 Mar 2016 13:38:21 +0100
From: freshobstuser@yahoo.com
To: dummy@email.com
Message-ID: <56d981bd691e4_a241d243945917a@Adsidera-PC.mail>
Subject: Welcome to FreshObst!
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
 Content-Transfer-Encoding: 7bit
X-SMTPAPI: {"to":[ "mikecontin67@gmail.com" ]}

<html>
  <body>
    <table>
      <tbody>
          <tr>
            <td><h2>Welcome Mike!</h2></td>
           </tr><br>
          <tr><td><p>Thank you for signing up with FreshObst</p></td>
          </tr>
          <tr><td><p>We wish you a fruity and healthy shopping by us ;) </p></td>
          </tr>
           <tr> <td><p><strong>Your FreshObst Team!</strong></p></td>
            </tr><br><br>
            <tr><td><p><small>This is an automated message. Please do not reply to this mail</small></p></td>
           </tr>

       </tbody>
      </table>
   </body>
</html>

 Completed 500 Internal Server Error in 1048ms (ActiveRecord: 86.0ms)

    Net::SMTPFatalError (550 Unauthenticated senders not allowed
   ):
        app/controllers/user_registrations_controller.rb:7:in `create'


 Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_source.erb (2.0ms)
  Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (5.0ms)
  Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.0ms)
  Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (75.0ms)
  Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/web-console-2.2.1/lib/web_console/templates/_markup.html.erb (1.0ms)
  Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/web-console-2.2.1/lib/web_console/templates/_inner_console_markup.html.erb within layouts/inlined_string (1.0ms)
  Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/web-console-2.2.1/lib/web_console/templates/_prompt_box_markup.html.erb within layouts/inlined_string (1.0ms)
  Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/web-console-2.2.1/lib/web_console/templates/style.css.erb within layouts/inlined_string (2.0ms)
 Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/web-console-2.2.1/lib/web_console/templates/console.js.erb within layouts/javascript (133.0ms)
 Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/web-console-2.2.1/lib/web_console/templates/main.js.erb within layouts/javascript (1.0ms)
 Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/web-console-2.2.1/lib/web_console/templates/error_page.js.erb within layouts/javascript (0.0ms)
 Rendered C:/row/Ruby200/lib/ruby/gems/2.0.0/gems/web-console-2.2.1/lib/web_console/templates/index.html.erb (224.0ms)

上一個錯誤的解決方案 :上一個錯誤似乎是由我默認選擇的yahoo.com郵件地址引起的,從我的SendGrid日志中得出:“ 550 5.7.1由於域的DMARC策略,不接受來自yahoo.com的未經身份驗證的電子郵件。如果這是一封合法郵件,請與yahoo.com域的管理員聯系。請訪問https://support.google.com/mail/answer/2451690以了解有關DMARC計划的信息。”

然后將默認郵件地址更改為非Yahoo郵件地址即可解決此問題。 非常感謝大家!

嘗試這個

# in app/views/user_mailer/welcome.html.erb
<td><h2>Welcome <%= @user.first_name %>!</h2></td>

# in app/mailers/user_mailer.rb
def welcome(user)
  @user = user
  @appname = "FreshObst"
  mail(:to => @user.email,
       :subject => "Welcome to #{@appname}!")
end

解決最后一個錯誤的方法 :雖然這最后一個錯誤似乎是由我默認選擇的yahoo.com郵件地址引起的,如我的SendGrid日志中所述:“ 550 5.7.1由於域的DMARC策略,不接受來自yahoo.com的未經身份驗證的電子郵件。如果這是一封合法郵件,請與yahoo.com域的管理員聯系。請訪問https://support.google.com/mail/answer/2451690以了解有關DMARC計划的信息。”

然后將默認郵件地址更改為非Yahoo郵件地址即可解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM