私は自分のアプリケーションに非常に簡単なユーザー認証を構築しようとしています。私は問題は、 'ログイン'フォームが:ユーザーデータベースを指していないことだと思う。新しいユーザーを作成すると、自動ログインに設定されています。この関数は素晴らしいですが、ログインフォームに同じユーザーをログインさせると、 "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
ヒント:user_idをセッションに格納することは、盗難や再利用が可能であるため安全ではありません。その代わりに、ログインごとに新しいセッショントークンを生成して保存する必要があります。 –
となります。私はヒントをありがとう! –