2016-06-02 7 views
0

私は自分のアプリケーションに非常に簡単なユーザー認証を構築しようとしています。私は問題は、 'ログイン'フォームが:ユーザーデータベースを指していないことだと思う。新しいユーザーを作成すると、自動ログインに設定されています。この関数は素晴らしいですが、ログインフォームに同じユーザーをログインさせると、 "username is NULL LIMIT 1"というエラーが返されます。私はRails 4.2.5を使用しています。 。ユーザーがまだ存在していることを、私は私の恐ろしいコーディング習慣のために事前に謝罪「ログイン」フォームがユーザーデータベースにアクセスしていません

、私はほとんど自分自身を教えてきたすべての助けを事前にいただきありがとうございます

セッションコントローラ:。。

class SessionsController < ApplicationController 

    def new 

    end 

    def create 

    user = User.find_by_username(params[:username]) 

    if user && user.authenticate(params[:username][:password]) 

     session[:user_id] = user.id 

     redirect_to root_path, notice: "You are now logged in." 

    else 

     redirect_to '/login', notice: "incorrect email or password! " 

    end 

    end 

    def destroy 

     session[:user_id] = nil 

     redirect_to root_path, notice: "logged out." 

    end 

end 

ユーザモデル

class User < ActiveRecord::Base 
has_secure_password 
validates_uniqueness_of :username, :email 
validates :password, length: {minimum: 6}, allow_blank: true 
has_many :messages 
end 
0私がログインしようとすると

ログインフォーム

<div class="login"> 
<%= simple_form_for :sessions do |f| %> 
    <%= f.input :username %> 
    <%= f.input :password %> 
    <%= f.button :submit, "Login" %> 
<% end %> 
</div> 

は、ターミナルリターン:

は、2016年6月2日午後12時02分15秒-0400で127.0.0.1のためのPOST "/ログイン" を開始しました"、{ "UTF8"=> "✓"、 "authenticity_token"=> "WNJziVL/xhAeGdsjNANi6LWlDrAMIGKm2kDWmsVLfxMh6fCwG1LoRWG09wgsn2z3rIZkreODkHZ0GJeYFCW3yQ =="、 "セッション"=> { "ユーザ名"=> "crackerjack540":SessionsController番号: 処理は、HTML パラメータとして作成しますユーザ負荷(0.2ms)SELECT "users"。* FROM "users" 。WHERE "ユーザー" "ユーザー名" の2msで発見された302(ActiveRecordの:0.2msの)完了http://localhost:3000/login にリダイレクト1 NULL LIMIT IS

+0

ヒント:user_idをセッションに格納することは、盗難や再利用が可能であるため安全ではありません。その代わりに、ログインごとに新しいセッショントークンを生成して保存する必要があります。 –

+0

となります。私はヒントをありがとう! –

答えて

1

ユーザー名は、セッションオブジェクト内にあるので、これに代えて:

user = User.find_by_username(params[:username]) 

あなたがこれを行うべきである:

user = User.find_by_username(params[:sessions][:username]) 

また、さらに以下に、パスワードにアクセスするには:

user.authenticate(params[:sessions][:password]) 

希望します。

+0

どうもありがとうございますが、今は "username =?" 「Username is NULL」の代わりに。 –

+0

params [:sessions] [:username]にアクセスするときに正しいユーザー名を取得していることを確認してください(ダブルチェックで値を自分で出力してみてください) – Alberto

+0

ありがとう、ありがとうございます。それはうまくいった。私はデータベースに新しいユーザーを追加しなければなりませんでしたが、今は魅力的に機能します。 –

関連する問題