Ich versuche, eine Login-Funktion für meine Rails-App einzurichten. Wenn ich auf die Login-Schaltfläche drücke, wird eine bcrypt-Fehlermeldung angezeigt:
LoadError in SessionsController#create
cannot load such file -- bcrypt
Bekommt jemand anderes diesen Fehler? Ich habe die neueste Version von bcrypt und verfolge genau das, was mir das Tutorial empfohlen hat.
User Model: Ich habe Sternchen um die Zeile gesetzt, wo der Fehler angeblich liegt.
class User < ActiveRecord::Base
****has_secure_password****
end
Sessions Controller:
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(id: params[session][:id])
if user && user.authenticate(params[:session][:password])
log_in user
redirect_to root_path
else
flash.now[:danger] = 'Invalid'
render 'new'
end
end
def destroy
end
end
ApplicationController:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
include SessionsHelper
end
SitzungenHelper:
module SessionsHelper
def log_in(user)
session[:user_id] = user.id
end
end
Gemfile:
gem 'bcrypt', '~> 3.1.7'
Sitzungen/neue Ansicht:
<div id= "admin-sign-in">
<%= form_for(:session, url: login_path) do |f| %>
<%= f.label :id %>
<%= f.text_field :id %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.submit "Log in", class: "btn btn-primary" %>
<% end %>
</div>
Wenn Sie: bundle install
Installiert haben, um bcrypt zu installieren, starten Sie einfach den Rails-Server neu. Es hat für mich funktioniert.
stellen Sie sicher, dass Sie nicht nur die Bundle-Installation ausführen, sondern auch den Server beenden und neu laden, um sicherzustellen, dass er in die neuen Gems geladen wird. Sie können Ihr Gemfile auch auf "Frühling" überprüfen. Wenn das auch geladen ist, sollten Sie das kommentieren, den Server neu laden und es dann versuchen. das sollte alle Möglichkeiten berücksichtigen.
Den Frühlingsprozess zu töten und Guard neu zu starten, hat das Problem für mich gelöst:
$ ps aux | grep spring
vier Federprozesse zurückgegeben:
ubuntu 11526 0.0 0.0 298748 24348 pts/1 Sl 22:08 0:00 spring server | mh03_sample_app | started 16 mins ago
ubuntu 11529 0.4 0.1 531764 79204 ? Ssl 22:08 0:04 spring app | mh03_sample_app | started 16 mins ago | test mode
...
...
töte (eins nach dem anderen):
$ kill -15 11526
$ kill -15 11529
$ kill ...
$ kill ...
und neu starten:
$ bundle exec guard
Eine schöne Erklärung finden Sie in Michael Hartls Rails Tutorial https://www.railstutorial.org/book/static_pages#aside-processes
Ich hatte das gleiche Problem, konnte es aber nicht lösen, bis ich die Gemfile-Datei bearbeitet und die Zeile unkommentiert hatte
gem 'bcrypt', '~> 3.1.7'
Ich habe ursprünglich Version 3.1.7 installiert, weil ich mir Sorgen machte, ob es möglicherweise Kompatibilitätsprobleme mit den späteren Versionen gab, die auf etwas basierten, das ich in einer anderen Lösung dieses Problems gelesen hatte, aber 3.1.7 schlug auch mit einer anderen Fehlermeldung fehl. 3.1.11 hat jedoch einwandfrei funktioniert, und deshalb habe ich den Kommentar in der Gemfile aufgeschoben, um ihn zu lesen
gem 'bcrypt', '~> 3.1.11
und installierte das Bundle erneut .. Das hat funktioniert.