Noriaki Takamizawa
Noriaki Takamizawa

Reputation: 1039

Rails redirects different url after failing reset password

I'm using devise on RoR. In the reset password, if you put wrong email, the app immediately would show some error and redirect original url.

In my app, the original url is like this.

http://localhost:3000/en/users/password/new

somehow it redirects when putting wrong email

http://localhost:3000/en/users/password/

Normally, this could be

http://localhost:3000/en/users/password/new

I can't figure out why this could happen. And would like to know what's wrong. Anyone help me.

Best

[appendix] Here's my route related to password.

$ rake routes
(in /Users/takamizawanoriaki/vegewel)
                               Prefix Verb     URI Pattern                                                             Controller#Action
                           home_index GET      /home/index(.:format)                                                   home#index
user_google_oauth2_omniauth_authorize GET|POST /users/auth/google_oauth2(.:format)                                     users/omniauth_callbacks#passthru
 user_google_oauth2_omniauth_callback GET|POST /users/auth/google_oauth2/callback(.:format)                            users/omniauth_callbacks#google_oauth2
     user_facebook_omniauth_authorize GET|POST /users/auth/facebook(.:format)                                          users/omniauth_callbacks#passthru
      user_facebook_omniauth_callback GET|POST /users/auth/facebook/callback(.:format)                                 users/omniauth_callbacks#facebook
      user_twitter_omniauth_authorize GET|POST /users/auth/twitter(.:format)                                           users/omniauth_callbacks#passthru
       user_twitter_omniauth_callback GET|POST /users/auth/twitter/callback(.:format)                                  users/omniauth_callbacks#twitter
                    user_confirmation POST     /users/confirmation(.:format)                                           devise/confirmations#create
                new_user_confirmation GET      /users/confirmation/new(.:format)                                       devise/confirmations#new
                                      GET      /users/confirmation(.:format)                                           devise/confirmations#show
                             shortcut GET      /shortcut/:id(.:format)                                                 shortcut#show
                                      GET      /(:locale)(.:format)                                                    frontpage#index {:locale=>/en|ja/}
                                 near GET      (/:locale)/near(.:format)                                               frontpage#near {:locale=>/en|ja/}
                    restaurant_nearby GET      (/:locale)/restaurant_nearby(.:format)                                  area#restaurant_nearby {:locale=>/en|ja/}
                         notification GET      (/:locale)/notification(.:format)                                       application#set_checked_notification {:locale=>/en|ja/}
                  notification_create GET      (/:locale)/notification/create(.:format)                                notification#create {:locale=>/en|ja/}
                   notification_index GET      (/:locale)/notification/index(.:format)                                 notification#index {:locale=>/en|ja/}
                           restaurant GET      (/:locale)/restaurant(.:format)                                         restaurant#index {:locale=>/en|ja/}
                                      GET      (/:locale)/restaurant/:id(.:format)                                     restaurant#show {:locale=>/en|ja/}
                                 menu GET      (/:locale)/menu(.:format)                                               menu#index {:locale=>/en|ja/}
                                      GET      (/:locale)/menu/:id(.:format)                                           menu#show {:locale=>/en|ja/}
                                 area GET      (/:locale)/area(.:format)                                               area#index {:locale=>/en|ja/}
                                      GET      (/:locale)/area/:id(.:format)                                           area#show {:locale=>/en|ja/}
                      restaurant_type GET      (/:locale)/restaurant_type(.:format)                                    restaurant_type#index {:locale=>/en|ja/}
                                      GET      (/:locale)/restaurant_type/:id(.:format)                                restaurant_type#show {:locale=>/en|ja/}
                              cuisine GET      (/:locale)/cuisine(.:format)                                            cuisine#index {:locale=>/en|ja/}
                                      GET      (/:locale)/cuisine/:id(.:format)                                        cuisine#show {:locale=>/en|ja/}
                              product GET      (/:locale)/product(.:format)                                            product#index {:locale=>/en|ja/}
                                      GET      (/:locale)/product/:id(.:format)                                        product#show {:locale=>/en|ja/}
                                 shop GET      (/:locale)/shop(.:format)                                               shop#index {:locale=>/en|ja/}
                                      GET      (/:locale)/shop/:id(.:format)                                           shop#show {:locale=>/en|ja/}
                            prefstate GET      (/:locale)/prefstate(.:format)                                          prefstate#index {:locale=>/en|ja/}
                                      GET      (/:locale)/prefstate/:id(.:format)                                      prefstate#show {:locale=>/en|ja/}
                                      GET      (/:locale)/style_image/:id(.:format)                                    style#show_image {:locale=>/en|ja/}
                               search GET      (/:locale)/search(.:format)                                             search#index {:locale=>/en|ja/}
                                batch GET      (/:locale)/batch(.:format)                                              batch#index {:locale=>/en|ja/}
                              privacy GET      (/:locale)/privacy(.:format)                                            privacy#index {:locale=>/en|ja/}
                                terms GET      (/:locale)/terms(.:format)                                              terms#index {:locale=>/en|ja/}
                             about_us GET      (/:locale)/about_us(.:format)                                           about_us#index {:locale=>/en|ja/}
                                 feed GET      (/:locale)/feed(.:format)                                               feed#feed {:format=>/rss/, :locale=>/en|ja/}
                    knowledge_sprouts GET      (/:locale)/knowledge_sprouts(.:format)                                  knowledge_sprouts#index {:locale=>/en|ja/}
                                      POST     (/:locale)/knowledge_sprouts(.:format)                                  knowledge_sprouts#create {:locale=>/en|ja/}
                 new_knowledge_sprout GET      (/:locale)/knowledge_sprouts/new(.:format)                              knowledge_sprouts#new {:locale=>/en|ja/}
                edit_knowledge_sprout GET      (/:locale)/knowledge_sprouts/:id/edit(.:format)                         knowledge_sprouts#edit {:locale=>/en|ja/}
                     knowledge_sprout GET      (/:locale)/knowledge_sprouts/:id(.:format)                              knowledge_sprouts#show {:locale=>/en|ja/}
                                      PATCH    (/:locale)/knowledge_sprouts/:id(.:format)                              knowledge_sprouts#update {:locale=>/en|ja/}
                                      PUT      (/:locale)/knowledge_sprouts/:id(.:format)                              knowledge_sprouts#update {:locale=>/en|ja/}
                                      DELETE   (/:locale)/knowledge_sprouts/:id(.:format)                              knowledge_sprouts#destroy {:locale=>/en|ja/}
                              answers GET      (/:locale)/answers(.:format)                                            answers#index {:locale=>/en|ja/}
                                      POST     (/:locale)/answers(.:format)                                            answers#create {:locale=>/en|ja/}
                           new_answer GET      (/:locale)/answers/new(.:format)                                        answers#new {:locale=>/en|ja/}
                          edit_answer GET      (/:locale)/answers/:id/edit(.:format)                                   answers#edit {:locale=>/en|ja/}
                               answer GET      (/:locale)/answers/:id(.:format)                                        answers#show {:locale=>/en|ja/}
                                      PATCH    (/:locale)/answers/:id(.:format)                                        answers#update {:locale=>/en|ja/}
                                      PUT      (/:locale)/answers/:id(.:format)                                        answers#update {:locale=>/en|ja/}
                                      DELETE   (/:locale)/answers/:id(.:format)                                        answers#destroy {:locale=>/en|ja/}
                              reviews GET      (/:locale)/reviews(.:format)                                            reviews#index {:locale=>/en|ja/}
                                      POST     (/:locale)/reviews(.:format)                                            reviews#create {:locale=>/en|ja/}
                           new_review GET      (/:locale)/reviews/new(.:format)                                        reviews#new {:locale=>/en|ja/}
                          edit_review GET      (/:locale)/reviews/:id/edit(.:format)                                   reviews#edit {:locale=>/en|ja/}
                               review GET      (/:locale)/reviews/:id(.:format)                                        reviews#show {:locale=>/en|ja/}
                                      PATCH    (/:locale)/reviews/:id(.:format)                                        reviews#update {:locale=>/en|ja/}
                                      PUT      (/:locale)/reviews/:id(.:format)                                        reviews#update {:locale=>/en|ja/}
                                      DELETE   (/:locale)/reviews/:id(.:format)                                        reviews#destroy {:locale=>/en|ja/}
                      product_reviews GET      (/:locale)/product_reviews(.:format)                                    product_reviews#index {:locale=>/en|ja/}
                                      POST     (/:locale)/product_reviews(.:format)                                    product_reviews#create {:locale=>/en|ja/}
                   new_product_review GET      (/:locale)/product_reviews/new(.:format)                                product_reviews#new {:locale=>/en|ja/}
                  edit_product_review GET      (/:locale)/product_reviews/:id/edit(.:format)                           product_reviews#edit {:locale=>/en|ja/}
                       product_review GET      (/:locale)/product_reviews/:id(.:format)                                product_reviews#show {:locale=>/en|ja/}
                                      PATCH    (/:locale)/product_reviews/:id(.:format)                                product_reviews#update {:locale=>/en|ja/}
                                      PUT      (/:locale)/product_reviews/:id(.:format)                                product_reviews#update {:locale=>/en|ja/}
                                      DELETE   (/:locale)/product_reviews/:id(.:format)                                product_reviews#destroy {:locale=>/en|ja/}
                        relationships POST     (/:locale)/relationships(.:format)                                      relationships#create {:locale=>/en|ja/}
                         relationship DELETE   (/:locale)/relationships/:id(.:format)                                  relationships#destroy {:locale=>/en|ja/}
                       review_upholds POST     (/:locale)/reviews/:review_id/upholds(.:format)                         upholds#create {:locale=>/en|ja/}
                        review_uphold DELETE   (/:locale)/reviews/:review_id/upholds/:id(.:format)                     upholds#destroy {:locale=>/en|ja/}
                                      GET      (/:locale)/reviews(.:format)                                            reviews#index {:locale=>/en|ja/}
                                      POST     (/:locale)/reviews(.:format)                                            reviews#create {:locale=>/en|ja/}
                                      GET      (/:locale)/reviews/new(.:format)                                        reviews#new {:locale=>/en|ja/}
                                      GET      (/:locale)/reviews/:id/edit(.:format)                                   reviews#edit {:locale=>/en|ja/}
                                      GET      (/:locale)/reviews/:id(.:format)                                        reviews#show {:locale=>/en|ja/}
                                      PATCH    (/:locale)/reviews/:id(.:format)                                        reviews#update {:locale=>/en|ja/}
                                      PUT      (/:locale)/reviews/:id(.:format)                                        reviews#update {:locale=>/en|ja/}
                                      DELETE   (/:locale)/reviews/:id(.:format)                                        reviews#destroy {:locale=>/en|ja/}
               product_review_upholds POST     (/:locale)/product_reviews/:product_review_id/upholds(.:format)         upholds#create {:locale=>/en|ja/}
                product_review_uphold DELETE   (/:locale)/product_reviews/:product_review_id/upholds/:id(.:format)     upholds#destroy {:locale=>/en|ja/}
                                      GET      (/:locale)/product_reviews(.:format)                                    product_reviews#index {:locale=>/en|ja/}
                                      POST     (/:locale)/product_reviews(.:format)                                    product_reviews#create {:locale=>/en|ja/}
                                      GET      (/:locale)/product_reviews/new(.:format)                                product_reviews#new {:locale=>/en|ja/}
                                      GET      (/:locale)/product_reviews/:id/edit(.:format)                           product_reviews#edit {:locale=>/en|ja/}
                                      GET      (/:locale)/product_reviews/:id(.:format)                                product_reviews#show {:locale=>/en|ja/}
                                      PATCH    (/:locale)/product_reviews/:id(.:format)                                product_reviews#update {:locale=>/en|ja/}
                                      PUT      (/:locale)/product_reviews/:id(.:format)                                product_reviews#update {:locale=>/en|ja/}
                                      DELETE   (/:locale)/product_reviews/:id(.:format)                                product_reviews#destroy {:locale=>/en|ja/}
                       answer_upholds POST     (/:locale)/answers/:answer_id/upholds(.:format)                         upholds#create {:locale=>/en|ja/}
                        answer_uphold DELETE   (/:locale)/answers/:answer_id/upholds/:id(.:format)                     upholds#destroy {:locale=>/en|ja/}
                                      GET      (/:locale)/answers(.:format)                                            answers#index {:locale=>/en|ja/}
                                      POST     (/:locale)/answers(.:format)                                            answers#create {:locale=>/en|ja/}
                                      GET      (/:locale)/answers/new(.:format)                                        answers#new {:locale=>/en|ja/}
                                      GET      (/:locale)/answers/:id/edit(.:format)                                   answers#edit {:locale=>/en|ja/}
                                      GET      (/:locale)/answers/:id(.:format)                                        answers#show {:locale=>/en|ja/}
                                      PATCH    (/:locale)/answers/:id(.:format)                                        answers#update {:locale=>/en|ja/}
                                      PUT      (/:locale)/answers/:id(.:format)                                        answers#update {:locale=>/en|ja/}
                                      DELETE   (/:locale)/answers/:id(.:format)                                        answers#destroy {:locale=>/en|ja/}
             knowledge_sprout_upholds POST     (/:locale)/knowledge_sprouts/:knowledge_sprout_id/upholds(.:format)     upholds#create {:locale=>/en|ja/}
              knowledge_sprout_uphold DELETE   (/:locale)/knowledge_sprouts/:knowledge_sprout_id/upholds/:id(.:format) upholds#destroy {:locale=>/en|ja/}
                                      GET      (/:locale)/knowledge_sprouts(.:format)                                  knowledge_sprouts#index {:locale=>/en|ja/}
                                      POST     (/:locale)/knowledge_sprouts(.:format)                                  knowledge_sprouts#create {:locale=>/en|ja/}
                                      GET      (/:locale)/knowledge_sprouts/new(.:format)                              knowledge_sprouts#new {:locale=>/en|ja/}
                                      GET      (/:locale)/knowledge_sprouts/:id/edit(.:format)                         knowledge_sprouts#edit {:locale=>/en|ja/}
                                      GET      (/:locale)/knowledge_sprouts/:id(.:format)                              knowledge_sprouts#show {:locale=>/en|ja/}
                                      PATCH    (/:locale)/knowledge_sprouts/:id(.:format)                              knowledge_sprouts#update {:locale=>/en|ja/}
                                      PUT      (/:locale)/knowledge_sprouts/:id(.:format)                              knowledge_sprouts#update {:locale=>/en|ja/}
                                      DELETE   (/:locale)/knowledge_sprouts/:id(.:format)                              knowledge_sprouts#destroy {:locale=>/en|ja/}
                     new_user_session GET      (/:locale)/users/sign_in(.:format)                                      devise/sessions#new {:locale=>/en|ja/}
                         user_session POST     (/:locale)/users/sign_in(.:format)                                      devise/sessions#create {:locale=>/en|ja/}
                 destroy_user_session DELETE   (/:locale)/users/sign_out(.:format)                                     devise/sessions#destroy {:locale=>/en|ja/}
                        user_password POST     (/:locale)/users/password(.:format)                                     devise/passwords#create {:locale=>/en|ja/}
                    new_user_password GET      (/:locale)/users/password/new(.:format)                                 devise/passwords#new {:locale=>/en|ja/}
                   edit_user_password GET      (/:locale)/users/password/edit(.:format)                                devise/passwords#edit {:locale=>/en|ja/}
                                      PATCH    (/:locale)/users/password(.:format)                                     devise/passwords#update {:locale=>/en|ja/}
                                      PUT      (/:locale)/users/password(.:format)                                     devise/passwords#update {:locale=>/en|ja/}
             cancel_user_registration GET      (/:locale)/users/cancel(.:format)                                       users/registrations#cancel {:locale=>/en|ja/}
                    user_registration POST     (/:locale)/users(.:format)                                              users/registrations#create {:locale=>/en|ja/}
                new_user_registration GET      (/:locale)/users/sign_up(.:format)                                      users/registrations#new {:locale=>/en|ja/}
               edit_user_registration GET      (/:locale)/users/edit(.:format)                                         users/registrations#edit {:locale=>/en|ja/}
                                      PATCH    (/:locale)/users(.:format)                                              users/registrations#update {:locale=>/en|ja/}
                                      PUT      (/:locale)/users(.:format)                                              users/registrations#update {:locale=>/en|ja/}
                                      DELETE   (/:locale)/users(.:format)                                              users/registrations#destroy {:locale=>/en|ja/}
                                      POST     (/:locale)/users/confirmation(.:format)                                 devise/confirmations#create {:locale=>/en|ja/}
                                      GET      (/:locale)/users/confirmation/new(.:format)                             devise/confirmations#new {:locale=>/en|ja/}
                                      GET      (/:locale)/users/confirmation(.:format)                                 devise/confirmations#show {:locale=>/en|ja/}
                                 user GET      (/:locale)/users/:id(.:format)                                          users#show {:locale=>/en|ja/}
                       following_user GET      (/:locale)/users/:id/following(.:format)                                users#following {:locale=>/en|ja/}
                       followers_user GET      (/:locale)/users/:id/followers(.:format)                                users#followers {:locale=>/en|ja/}
                                users GET      (/:locale)/users(.:format)                                              users#index {:locale=>/en|ja/}
                                      POST     (/:locale)/users(.:format)                                              users#create {:locale=>/en|ja/}
                             new_user GET      (/:locale)/users/new(.:format)                                          users#new {:locale=>/en|ja/}
                            edit_user GET      (/:locale)/users/:id/edit(.:format)                                     users#edit {:locale=>/en|ja/}
                                      GET      (/:locale)/users/:id(.:format)                                          users#show {:locale=>/en|ja/}
                                      PATCH    (/:locale)/users/:id(.:format)                                          users#update {:locale=>/en|ja/}
                                      PUT      (/:locale)/users/:id(.:format)                                          users#update {:locale=>/en|ja/}
                                      DELETE   (/:locale)/users/:id(.:format)                                          users#destroy {:locale=>/en|ja/}
                          ahoy_engine          /ahoy                                                                   Ahoy::Engine

Also here's route.rb

  # You can have the root of your site routed with "root"
  # root 'welcome#index'
  get 'home/index'

devise_for :users, skip: [:session, :password, :registration], controllers: { omniauth_callbacks: "users/omniauth_callbacks" }

  #Route for QR
   resources :shortcut, only: [:show]

 # Locale Information
scope "(:locale)", locale: /en|ja/ do
   get '/' => 'frontpage#index'

   resources :knowledge_sprouts
   resources :answers
   resources :reviews
   resources :product_reviews
   resources :relationships, only: [:create, :destroy]

   resources :reviews, :product_reviews, :answers, :knowledge_sprouts do
     resources :upholds, only: [:create, :destroy]
   end

   devise_for :users, skip: [:omniauth_callbacks], :controllers => { :registrations => 'users/registrations' }
   resources :users, :only => [:show]

  devise_scope :users do
    get 'password' => redirect('password/new', status: 301)
  end

   resources :users do
     member do
       get :following, :followers
     end
   end
end

Upvotes: 0

Views: 389

Answers (2)

hoangdd
hoangdd

Reputation: 509

Look like it works normally. If you check your routes and you will see something likes that:

rake routes | grep password

new_user_password GET      (/:locale)/users/password/new(.:format)       user/passwords#new
    user_password PATCH    (/:locale)/users/password(.:format)           user/passwords#update
                  PUT      (/:locale)/users/password(.:format)           user/passwords#update
                  POST     (/:locale)/users/password(.:format)           user/passwords#create

It means http://localhost:3000/en/users/password/new page render your form and http://localhost:3000/en/users/password/ is where the form submit data to.

Note: If you want open http://localhost:3000/en/users/password/ by enter url or reload page, you must setup router for GET request. In your devise scope:

[Update route]

scope "(:locale)", locale: /en|ja/ do
  ...

  devise_for :users, skip: [:omniauth_callbacks] , :controllers => { :registrations => 'users/registrations' }
  get 'users/password' => redirect('%{locale}/users/password/new', status: 301)
  resources :users do
    member do
      get :following, :followers
    end
  end

  ...
end

Hope it helps.

Upvotes: 0

rony36
rony36

Reputation: 3339

First of all, when you are performing submit of password, it goes to create or update action and method would be PATCH or PUT or POST.

Yes, you can forcefully make it redirect to new action (BUT IT IS NOT A GOOD SOLUTION AS FAR AS YOU DESCRIBED YOUR ISSUE) by overriding password controller.

Here you could find how to override password_controller.

Cheers

Upvotes: 1

Related Questions