Net::SMTPAuthenticationError (530-5.5.1 Требуется аутентификация. Подробнее на):
Я следую Руководству по Rails в Главе 10. Поскольку у меня нет кредитной карты, я пытаюсь отправить электронное письмо в процессе разработки. Я новичок в программировании, поэтому я просто хочу посмотреть, как это работает.
Но я получаю эту ошибку.
Net::SMTPAuthenticationError (530-5.5.1 Authentication Required. Learn more at
):
app/models/user.rb:65:in `send_password_reset_email'
app/controllers/password_resets_controller.rb:13:in `create'
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_source.erb (5.3ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_trace.html.erb (2.6ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_request_and_response.html.erb (1.1ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_web_console.html.erb (0.9ms)
Rendered /home/budi/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/diagnostics.html.erb within rescues/layout (30.9ms)
Может ли кто-нибудь показать мне, где я пропустил?
development.rb
config.cache_classes = false
config.eager_load = false
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'mail.google.com',
:user_name => ENV['#I hardcoded it here'], # I put my my email which I used regularly here.
:password => ENV['#I hardcoded it here'], # I put the password here.
:authentication => 'plain',
:enable_starttls_auto => true
}
config.active_support.deprecation = :log
config.active_record.migration_error = :page_load
config.assets.debug = true
config.assets.digest = true
config.assets.raise_runtime_errors = true
user_mailer.rb
class UserMailer < ApplicationMailer
def account_activation(user)
@user = user
mail to: user.email, subject: "Account activation"
end
def password_reset(user)
@user = user
mail to: user.email, subject: "Password reset"
end
end
application_mailer.rb
class ApplicationMailer < ActionMailer::Base
#default from: "from@example.com"
default from: "xxxxxx@gmail.com" # I put my my email which I used regularly here.
layout 'mailer'
end
password_reset_controller.rb
class PasswordResetsController < ApplicationController
before_action :get_user, only: [:edit, :update]
before_action :valid_user, only: [:edit, :update]
before_action :check_expiration, only: [:edit, :update]
def new
end
def create
@user = User.find_by(email: params[:password_reset][:email].downcase)
if @user
@user.create_reset_digest
@user.send_password_reset_email
flash[:info] = "Email sent with password reset instructions"
redirect_to root_url
else
flash.now[:danger] = "Email address not found"
render 'new'
end
end
def edit
end
def update
if params[:user][:password].empty?
@user.errors.add(:password, "can't be empty")
render 'edit'
elsif @user.update_attributes(user_params)
log_in @user
flash[:success] = "Password has been reset."
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:password, :password_confirmation)
end
def get_user
@user = User.find_by(email: params[:email])
end
# Confirms a valid user.
def valid_user
unless (@user && @user.activated? && @user.authenticated?(:reset, params[:id]))
redirect_to root_url
end
end
# Checks expiration of reset token.
def check_expiration
if @user.password_reset_expired?
flash[:danger] = "Password reset has expired."
redirect_to new_password_reset_url
end
end
end
2 ответа
Я хотел бы предложить вам продолжить
Определенно помог бы Вам
Изменить обновление
Разрешить менее защищенным приложениям доступ к аккаунтам
Google может блокировать попытки входа в некоторые приложения или устройства, которые не используют современные стандарты безопасности. Поскольку эти приложения и устройства легче взломать, их блокировка помогает обеспечить безопасность вашей учетной записи.
Вот некоторые примеры приложений, которые не поддерживают новейшие стандарты безопасности:
Приложение Почта на вашем iPhone или iPad с iOS 6 или ниже Приложение Почта
на вашем телефоне Windows Phone, предшествующем версии 8.1
такие клиенты, как Microsoft Outlook и Mozilla Thunderbird
Надеюсь, вы не установите имя пользователя и пароль в переменной среды ENV
вместо этого ты пишешь это ENV["the actual user name"]
так что это не прошло.
и попробуйте gmail.com, если вы хотите отправить его через Gmail
Ты можешь использовать
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:user_name => "test@gmail.com" #your gmail id
:password => "1234" #your gmail password
:authentication => :plain,
:enable_starttls_auto => true
}
или если вы хотите установить пароль в env
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: "gmail.com",
authentication: "plain",
enable_starttls_auto: true,
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"]
}
Если вы знакомы с Unix, у вас, вероятно, был опыт установки переменных среды. Переменные среды Unix обычно устанавливаются в файле, который читается при запуске интерактивной оболочки (файл ~/.bashrc для оболочки bash).
Для оболочки bash отредактируйте файл ~/.bashrc и добавьте:
export GMAIL_USERNAME="myname@gmail.com"
export GMAIL_PASSWORD="mypassword"