質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
ドメイン

ドメインとは本来、領域や範囲の意味を持ち、インターネット上では特定の部分領域を指します。ネットワークやコンピュータの識別に利用され、所得することでホームページを公開したり、メールアドレスを作成できます。

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

1回答

2151閲覧

rails6 サブドメイン環境で、deviseの確認メールのURLを通したい

koki0125

総合スコア24

ドメイン

ドメインとは本来、領域や範囲の意味を持ち、インターネット上では特定の部分領域を指します。ネットワークやコンピュータの識別に利用され、所得することでホームページを公開したり、メールアドレスを作成できます。

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2021/03/04 03:19

編集2021/03/09 05:37

環境:
ruby 2.6.5
Rails 6.0.0
devise 4.7.3 from https://github.com/heartcombo/devise.git (at ca-omniauth-2@e16d60d)
letter_opener

解決したいこと:
letter_openerから開いた、deviseのconfirmation_instructionsメールにある認証URLから
ユーザー認証をさせたい。

状況:
上記操作をすると、認証URLから飛んだらrouting errorがおきます。
url:
https://company.localhost:3001/companies/confirmation?confirmation_token=QhUcNyibR7sJrVRs61-F

しかし、routesを確認すると存在しています。
サブドメインでないroutesのユーザーは、deviseのメール内の認証URLから認証できました。
原因がわからず困っています。ここからどう調べたら良いのかも。。

※rails6 に deviseで、3モデルを分けて管理しています。
※サブドメインが原因かと思っていますが核心にたどり着けません。
※サブドメインは、hostsとrailsでも設定していてアクセスすることはできます。

どんな些細な情報でも良いのでお聞かせいただければと思います。
よろしくお願い致します。

追記ーーーーーーーーーーーー
OKなURL:
https://localhost:3001/users/confirmation?confirmation_token=jJKBCgMK9sdMb-tgEkco
NGなURL:
https://company.localhost:3001/companies/confirmation?confirmation_token=iFe9BQvWXztHWegPn33v
追記ーーーーーーーーーーーー

イメージ説明

ruby

1routes.rb 2 # サブドメイン company.localhost.com 3 # -------------------------------------------- 4 constraints subdomain: 'company' do 5 get '/', :to => 'companies#top', as: :company_top 6 scope module: :companies do 7 devise_for :companies, skip: [:registrations], controller: { 8 sessions: "companies/sessions", 9 passwords: "companies/passwords", 10 registrations: "companies/registrations", 11 confirmations: "companies/confirmations", 12 unlocks: "companies/unlocks", 13 invitations: 'companies/invitations' 14 } 15 devise_scope :company do 16 get 'companies/sign_up', :to => 'registrations#new', as: :company_registration_new 17 get 'companies/confirm', :to => 'registrations#confirm', as: :company_registration_complete 18 get 'companies/done', :to => 'registrations#done', as: :company_registration_done 19 post '/company_create', :to => "registrations#create", as: :company_registration_create 20 get '/password/done', :to => 'passwords#done', as: :company_password_done 21 post '/invitation/confirm', :to => 'invitations#confirm', as: :confirm_company_invitation 22 get '/invitation/done', :to => 'invitations#done' 23 put '/:id/config/done', :to => 'registrations#update', as: :update_company_registration 24 end 25 end 26 end

ruby

1app/views/companies/mailer/confirmation_instructins.html.erb 2 3<p>Welcome <%= @email %>!</p> 4 5<p>You can confirm your account email through the link below:</p> 6 7<p><%= link_to 'アカウントを有効にする', controller: 'companies/confirmations', action: 'create', confirmation_token: @token %></p> 8

ruby

1app/controllers/mailer.rb 2class Mailer < Devise::Mailer 3 4 # User 5 def confirmation_instructions(record, token, opts={}) 6 mail = super 7 if record.class == Company 8 mail.subject = "会社メールアドレス認証のお願い" 9 elsif ecord.class == Admin 10 mail.subject = "管理者アカウントのメールアドレス認証のお願い" 11 else # User 12 mail.subject = "アカウントのメールアドレス認証のお願い" 13 end 14 mail 15 end 16

ruby

1app/controllers/companies/confirmations_controller.rb 2# frozen_string_literal: true 3 4class Companies::ConfirmationsController < Devise::ConfirmationsController 5 # GET /resource/confirmation/new 6 # def new 7 # super 8 # end 9 10 # POST /resource/confirmation 11 # def create 12 # super 13 # end 14 15 # GET /resource/confirmation?confirmation_token=abcdef 16 # def show 17 # super 18 # end 19 20 # protected 21 22 # The path used after resending confirmation instructions. 23 def after_resending_confirmation_instructions_path_for(resource_name) 24 company_top_path 25 # super(resource_name) 26 end

ruby

1rails routes 2 Prefix Verb URI Pattern Controller#Action 3 letter_opener_web /letter_opener LetterOpenerWeb::Engine 4 root GET / 5 new_user_confirmation GET /users/confirmation/new(.:format) users/confirmations#new {:subdomain=>""} 6 user_confirmation GET /users/confirmation(.:format) users/confirmations#show {:subdomain=>""} 7 POST /users/confirmation(.:format) users/confirmations#create {:subdomain=>""} 8 users_sign_up GET /users/sign_up(.:format) users/registrations#new {:subdomain=>""} 9 user_registration POST /user_create(.:format) users/registrations#create {:subdomain=>""} 10 user_update_registration PUT /user_create(.:format) users/registrations#update {:subdomain=>""} 11 user_destroy_registration DELETE /user_create(.:format) users/registrations#destroy {:subdomain=>""} 12 company_top GET / companies#top {:subdomain=>"company"} 13 new_company_session GET /companies/sign_in(.:format) companies/sessions#new {:subdomain=>"company"} 14 company_session POST /companies/sign_in(.:format) companies/sessions#create {:subdomain=>"company"} 15 destroy_company_session DELETE /companies/sign_out(.:format) companies/sessions#destroy {:subdomain=>"company"} 16 new_company_confirmation GET /companies/confirmation/new(.:format) companies/confirmations#new {:subdomain=>"company"} 17 company_confirmation GET /companies/confirmation(.:format) companies/confirmations#show {:subdomain=>"company"} 18 POST /companies/confirmation(.:format) companies/confirmations#create {:subdomain=>"company"} 19 accept_company_invitation GET /companies/invitation/accept(.:format) companies/invitations#edit {:subdomain=>"company"} 20 remove_company_invitation GET /companies/invitation/remove(.:format) companies/invitations#destroy {:subdomain=>"company"} 21 new_company_invitation GET /companies/invitation/new(.:format) companies/invitations#new {:subdomain=>"company"} 22 company_invitation PATCH /companies/invitation(.:format) companies/invitations#update {:subdomain=>"company"} 23 PUT /companies/invitation(.:format) companies/invitations#update {:subdomain=>"company"} 24 POST /companies/invitation(.:format) companies/invitations#create {:subdomain=>"company"} 25 company_registration_new GET /companies/sign_up(.:format) companies/registrations#new {:subdomain=>"company"} 26 company_registration_complete GET /companies/confirm(.:format) companies/registrations#confirm {:subdomain=>"company"} 27 company_registration_done GET /companies/done(.:format) companies/registrations#done {:subdomain=>"company"} 28 company_registration_create POST /company_create(.:format) companies/registrations#create {:subdomain=>"company"} 29 company_password_done GET /password/done(.:format) companies/passwords#done {:subdomain=>"company"} 30 confirm_company_invitation POST /invitation/confirm(.:format) companies/invitations#confirm {:subdomain=>"company"} 31 invitation_done GET /invitation/done(.:format) companies/invitations#done {:subdomain=>"company" 32 33 34Routes for LetterOpenerWeb::Engine: 35clear_letters DELETE /clear(.:format) letter_opener_web/letters#clear 36delete_letter DELETE /:id(.:format) letter_opener_web/letters#destroy 37 letters GET / letter_opener_web/letters#index 38 letter GET /:id(/:style)(.:format) letter_opener_web/letters#show 39 GET /:id/attachments/:file(.:format) letter_opener_web/letters#attachment 40

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2021/03/04 13:26

「サブドメイン環境で」というのがわかりません。 「サブドメイン環境で」ある場合とではない場合では 実行環境や操作その他 どこが違うのでしょうか
koki0125

2021/03/08 02:17

routesファイルが違う程度で、他に user と company の間に違いは、ないと存じます。 サブドメイン環境で、他のページには遷移できますが、deviseのメール認証URLとパスワードリセットURLではrouting errorが出ています。。
winterboum

2021/03/08 02:57

2台サーバーが有るのですか?
koki0125

2021/03/08 03:44 編集

いいえ、わけておりません。今は ローカル環境で config/environments/development.rbに以下を記述しています。 ーーーーーーーーーーーーー # subdomain対応 config.hosts << "localhost.com" config.hosts << "company.localhost.com" config.hosts << "admin.localhost.com" ーーーーーーーーーーーーー 正しく質問に答えられているでしょうか。 よろしくお願いします。
winterboum

2021/03/08 04:19

環境がわからん。
winterboum

2021/03/08 04:30

一つのサーバーで復数のドメインを運用している。 という意味でもないですよね、developmentだから。 もしかして、config.hostsに追加したドメイン全てが同時に有効 と思ってます?
koki0125

2021/03/08 09:08

development環境で動かすために一つのサーバーで復数のドメインを運用しています。 アクセスを確認するため、ローカルPCのetc/hostsにも以下を追加しております。 ------------------------------------------------------------------------------ 127.0.0.1 localhost.com company.localhost.com admin.localhost.com ------------------------------------------------------------------------------ 上記、伝わりますでしょうか?
winterboum

2021/03/08 10:34

「development環境で動かすために一つのサーバーで復数のドメインを運用」とは具体的にはどうやっていますか?
koki0125

2021/03/08 12:59

dockerでwebサーバーを立てています。 以下の記事と同じことをしております。 1。 https://qiita.com/Densetsu/items/c5fbba776982835f5216 2。 config/environments/development.rbに以下を記述しています。 ーーーーーーーーーーーーー # subdomain対応 config.hosts << "localhost.com" config.hosts << "company.localhost.com" config.hosts << "admin.localhost.com" ーーーーーーーーーーーーー
winterboum

2021/03/08 22:35

すると どういうURLが渡っているのか、がポイントかな。 OKなURLとNGなURLを載せてください。
koki0125

2021/03/09 04:07

承知いたしました。 URLを追記しました。(サブドメインには、SSLがかかっていません。)
winterboum

2021/03/09 04:40

routes.rbが複雑でわからん、。、、 rails route の結果見せてください
koki0125

2021/03/09 05:38

字数制限ありましたので関係ありそうなところ追記しました!
winterboum

2021/03/09 08:10

貼り付けてある画像にも出てましたね。 で、 ありますね、そのroute。 はて。。。。。
koki0125

2021/03/09 08:24

routeにも存在しているのですが、SSLしていないことはここでは関係してないですよね。。? これからどう調査したら良いか。。 なにかアドバイスでもいただけましたら幸いです。
koki0125

2021/03/09 08:26

関係しているかわかりませんが、 company model には、devise invitable(招待)をつけています。 user model には invitable(招待)はありません。
koki0125

2021/03/21 01:23

そこは間違いありませんでした。 が、質問いただいたおかげで、原因を特定できました。 ありがとうございます!
guest

回答1

0

自己解決

localPCのhostsに
サブドメイン許容のために、以下を書いていた。

127.0.0.1 service.com company.service.com admin.service.com

URLを以下に修正すると通りました。
company.localhost:3001/...

company.service.com:3001/...

winterboumさま、suamaさま
相談に乗っていただきありがとうございました!!

投稿2021/03/21 01:27

koki0125

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問