Ich versuche, eine sehr einfache Benutzerauthentifizierung für meine Anwendung zu erstellen. Ich denke, das Problem ist, dass das Anmeldeformular nicht auf die Benutzerdatenbank verweist. Wenn ich einen neuen Benutzer erstelle, kann ich ihn automatisch anmelden. Diese Funktion funktioniert gut, aber wenn ich denselben Benutzer im Login-Formular anmelde, gibt es einen Fehler von "Benutzername ist NULL LIMIT 1. Ich verwende Rails 4.2.5. Wenn ich auf die Rails-Konsole gehe, kann ich sehen ., dass der Benutzer immer noch existiert'Login' Formular nicht auf Benutzerdatenbank zugreifen
ich im Voraus für meine schreckliche Codierung Gewohnheiten entschuldigen, habe ich meist selbst unterrichtet Vielen Dank im Voraus für jede Hilfe
Sessions Controller:..
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
Benutzermodell
class User < ActiveRecord::Base
has_secure_password
validates_uniqueness_of :username, :email
validates :password, length: {minimum: 6}, allow_blank: true
has_many :messages
end
Login Form
<div class="login">
<%= simple_form_for :sessions do |f| %>
<%= f.input :username %>
<%= f.input :password %>
<%= f.button :submit, "Login" %>
<% end %>
</div>
Wenn ich versuche, das Terminal wieder anmelden,:
Gestartet POST für 127.0.0.1 "/ login" auf 2016.06.02 00.02.15 -0400 Verarbeitung von SessionsController # erstellen, wie HTML Parameter: { "UTF-8" => "✓", "authenticity_token" => "WNJziVL/xhAeGdsjNANi6LWlDrAMIGKm2kDWmsVLfxMh6fCwG1LoRWG09wgsn2z3rIZkreODkHZ0GJeYFCW3yQ ==", "Sitzungen" => { "username" => "crackerjack540", " Passwort "=>" [FILTERED] "}," commit "=>" Login "} Benutzer laden (0.2ms) SELECT" Benutzer ". * FROM" Benutzer " . WHERE "Benutzer" "username" NULL LIMIT 1 Weitergeleitet IS http://localhost:3000/login 302 in 2ms Gefunden Completed (Active: 0,2 ms)
Ein Tipp: Speichern von user_id in Sitzung ist nicht sicher, da es gestohlen und wiederverwendet werden kann. Sie sollten bei jeder Anmeldung ein neues Sitzungstoken generieren und dieses stattdessen speichern. –
Wird tun. Ich schätze den Tipp! –