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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

216閲覧

Ruby on Rails: ログイン機能を作成中です

S.N.

総合スコア21

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/09/15 07:04

いまやっていること

Ruby on Railsにて、複数人でバージョン管理しながらアプリケーションを作っています。
その中で、ユーザのログイン機能を、セッションを利用して作っています。

困っていること

下記のようなエラーが出るのですが、ルーティングをどう指定してよいかいまいちわかりません。
以下はエラー画面です。

Ruby

1Routing Error 2No route matches [POST] "/user/login" 3 4Parameters: 5 6{"utf8"=>"✓", 7 "authenticity_token"=>"A9Qqjtdz1DH6yD4nHkQ5l0CR2bEuRtWOiz375ZtL1WPCIMHYtHNsELNDwK0RCeI9lPKYtTEqDXEH0Yo4jZGFZw==", 8 "session"=>{"email"=>"test2@test.com", 9 "password"=>"[FILTERED]"}, 10 "commit"=>"ログインする"}

ソースコード

Ruby

1# コントローラ 2def login_form 3 @current_user = User.find_by(id: session[:user_id]) 4 @user = User.find_by(id: params[:id]) 5 end 6 7 def login 8 puts params 9 @user = User.find_by( 10 email: params[:email], 11 password: params[:password] 12 ) 13 if @user 14 session[:user_id] = @user.id 15 redirect_to ("/home/top") 16 else 17 @email = params[:email] 18 @password = params[:password] 19 render('user/login_form') 20 end 21 end 22 23#ルーティング 24 post '/logout' => 'user#logout' 25 post '/login' => 'user#login' 26 get 'user/login_form' => 'user#login_form' 27 get 'user/home' => 'user#home' 28 resources :user 29 30#ビュー 31<div class = "login-wrapper"> 32 <div class = "login-title"> 33 <h1>ログイン</h1> 34 </div> 35 <%= form_for :session, :url=> "login" do |f| %> 36 <div class = "login-user_email"> 37 <p>メールアドレスを入力</p> 38 <%= f.text_field :email %> 39 </div> 40 <div class = "login-user_email"> 41 <p>パスワードを入力</p> 42 <%= f.text_field :password %> 43 </div> 44 <%= f.submit 'ログインする' %>> 45 <% end %> 46</div>

試してみたこと

ログインルーティングを「/:id」を含まない形にしてみましたが…
エラーの画面を見ると引数の値は入っているようなので渡し方で解決できるのかなと思っています。

その他

ログイン機能を解決できると会員とその他のユーザで画面分けたり、などその次にいけるので、
解決したいです。
お力添えいただければと思います。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

No route matches [POST] "/user/login"

post '/logout' => 'user#logout'
post '/login' => 'user#login'
get 'user/login_form' => 'user#login_form'
get 'user/home' => 'user#home'
resources :user

/user/loginに該当するルーティングが定義されていません。

post '/login' => 'user#login'

では無く

post '/user/login' => 'user#login'

がやりたいことではないでしょうか。

それ以前に、認証機構の自作は危険ですので、信頼できるライブラリを使うのが定石です。Railsであればdeviseというライブラリがあるので取り合えずこれ使ってください。

https://github.com/plataformatec/devise

また、Railsチュートリアルなどで基礎の部分を一通り押さえてから先に進むことをお勧めします。

https://railstutorial.jp/

投稿2017/09/15 13:09

suzukis

総合スコア1449

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

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

S.N.

2017/09/15 13:39

ご回答ありがとうございます。 自作、危険なんですね。。ご指摘ありがとうございます。 別の教材で一通り勉強しており、その時にはご指摘いただいた内容が なかったため、知りませんでした。。 勉強になりました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問