придумать подтверждающий не работает в последней версии - PullRequest
6 голосов
/ 31 октября 2011

Я недавно обновился с Devise 1.2 до 1.4.9, и все, кажется, работает, кроме моего подтверждаемого модуля.Электронная почта работает так же, как и весь процесс.Но страница подтверждения всегда пуста.Это работает, и это подтверждает учетную запись электронной почты, но это не перенаправляет пользователя и выдает ошибку 406.Он делает то же самое для ложных попыток подтверждения.

Кажется, что маршруты работают нормально, я подтвердил в моей модели пользователя, и ничего больше не изменилось.

Есть идеи?Мне не хватает некоторых настроек или что-то, что мне нужно обновить для 1.4.9?

ОБНОВЛЕНИЕ

Кажется, это проблема с генерируемым URL.По какой-то неизвестной причине он добавляет URL подтверждения с именем пользователя?и это заставляет его сломаться.Но я все еще не уверен, как это исправить.

http://localhost:5000/users/confirmation.someusername?confirmation_token=R7apAPhC5c3rszvhsowp

Имя пользователя в URL выше приводит к тому, что процесс не работает.

Я проверил diffмежду контроллером в 1.2 (который работает) и новой версией.

1.2

  # GET /resource/confirmation?confirmation_token=abcdef
  def show
    self.resource = resource_class.confirm_by_token(params[:confirmation_token])

    if resource.errors.empty?
      set_flash_message :notice, :confirmed
      sign_in_and_redirect(resource_name, resource)
    else
      render_with_scope :new
    end
  end

1.4.9

  # GET /resource/confirmation?confirmation_token=abcdef
  def show
    self.resource = resource_class.confirm_by_token(params[:confirmation_token])

    if resource.errors.empty?
      set_flash_message(:notice, :confirmed) if is_navigational_format?
      sign_in(resource_name, resource)
      respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource_name, resource) }
    else
      respond_with_navigational(resource.errors, :status => :unprocessable_entity){ render_with_scope :new }
    end
  end

  protected

    # The path used after resending confirmation instructions.
    def after_resending_confirmation_instructions_path_for(resource_name)
      new_session_path(resource_name)
    end

    # The path used after confirmation.
    def after_confirmation_path_for(resource_name, resource)
      after_sign_in_path_for(resource)
    end

ошибка

Started GET "/users/confirmation.sdfsdfsd?confirmation_token=vmxmx73xvM7sUfcvH9CX" for 127.0.0.1 at 2011-10-31 13:30:33 +0100
  Processing by Devise::ConfirmationsController#show as 
  Parameters: {"confirmation_token"=>"vmxmx73xvM7sUfcvH9CX"}
  SQL (1.1ms)   SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
 FROM pg_attribute a LEFT JOIN pg_attrdef d
 ON a.attrelid = d.adrelid AND a.attnum = d.adnum
 WHERE a.attrelid = '"users"'::regclass
 AND a.attnum > 0 AND NOT a.attisdropped
 ORDER BY a.attnum

  User Load (1.2ms)  SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = 'vmxmx73xvM7sUfcvH9CX' LIMIT 1
  SQL (0.7ms)   SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
 FROM pg_attribute a LEFT JOIN pg_attrdef d
 ON a.attrelid = d.adrelid AND a.attnum = d.adnum
 WHERE a.attrelid = '"users"'::regclass
 AND a.attnum > 0 AND NOT a.attisdropped
 ORDER BY a.attnum

Completed 406 Not Acceptable in 28ms

Ответы [ 5 ]

7 голосов
/ 03 ноября 2011

Кто-то еще указал мне правильное направление, но вот мое точное решение.Проблема была в шаблонах представления устройства, которые я скопировал из 1.2?Похоже, что они изменили помощника ссылки с user_confirmation_url() на simply confirmation_url().

старое электронное письмо с подтверждением

<p>Welcome <%= @resource.email %>!</p>

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

<p><%= link_to 'Confirm my account', user_confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p>

новый шаблон подтверждения

<p>Welcome <%= @resource.email %>!</p>

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

<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p>
5 голосов
/ 04 ноября 2011

Посмотрите и посмотрите, скопировали ли вы уже разработанные представления, они могут быть устаревшими.

У меня была похожая проблема получение нечетных идентификаторов пользователей в моем URL, devise больше не используетuser_confirmation_url в пользу confirmation_url (по состоянию на 1.0?, Но он все еще работал немного дольше), так что вы можете либо удалить свои собственные представления devise, либо обновить помощник по URL.

1 голос
/ 05 декабря 2012

Последний код устройства:

<p><%= link_to 'Confirm my account', model_confirmation_url(:confirmation_token => @model.confirmation_token) %></p>

версия
devise-2.1.2

0 голосов
/ 25 мая 2015

Для моего случая (Rails 4.2 и devise 3.4.1)

исправление сгенерированного представления (в app / views / devise / mailer / translation_instructions.html.erb) требовало удаления @resource в user_confirmation_url дляпросто:

@token)%>

0 голосов
/ 09 февраля 2015

В моем случае у меня были пользовательские представления в views / devise, например views / devise / translations / new.html.erb с использованием users_confirmation_url.Я не получаю больше ошибок после того, как я переместил их в under views / users и использовал translation_url.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...