Hier ist ein sehr einfaches Authentifizierungsschema für Sinatra.
Ich werde erklären, wie es unten funktioniert.
class App < Sinatra::Base
set :sessions => true
register do
def auth (type)
condition do
redirect "/login" unless send("is_#{type}?")
end
end
end
helpers do
def is_user?
@user != nil
end
end
before do
@user = User.get(session[:user_id])
end
get "/" do
"Hello, anonymous."
end
get "/protected", :auth => :user do
"Hello, #{@user.name}."
end
post "/login" do
session[:user_id] = User.authenticate(params).id
end
get "/logout" do
session[:user_id] = nil
end
end
Für jede Route, die Sie schützen möchten, fügen Sie den :auth => :user
Zustand, um es, wie im /protected
Beispiel oben. Das ruft die Methode auth
auf, die über condition
eine Bedingung zur Route hinzufügt.
Die Bedingung ruft die Methode is_user?
auf, die als Hilfsprogramm definiert wurde. Die Methode sollte True oder False zurückgeben, abhängig davon, ob die Sitzung eine gültige Konto-ID enthält. (Calling Helfer dynamisch wie dies macht es einfach, andere Arten von Benutzern mit unterschiedlichen Berechtigungen hinzuzufügen.)
Schließlich ist die before
Handler richten ein @user
Instanz-Variable für jede Anforderung für Dinge wie die Anzeige des Namen des Benutzers an der Spitze von jedem Seite. Sie können auch die is_user?
Helfer in Ihren Ansichten verwenden, um festzustellen, ob der Benutzer angemeldet ist
Obwohl ich nicht einmal so tun werde, als ob dies eine Antwort auf Ihre Frage ist, werde ich darauf hinweisen, dass es von Natur aus gefährlich ist, ein eigenes Authentifizierungsschema zu entwerfen und zu entwickeln. Es gibt viele "Hacker", die anfangen zu sabbern, wenn sie solche Dinge finden. Es ist besser, etablierte, bewährte Tools dafür zu finden.Es ist kein neues Problem und es gibt bereits viele akzeptable Lösungen. – jaydel
Verwenden Sie bcrypt gem. Es kann kryptische Hashes für Passwörter erzeugen und wenn ein Hacker auf Ihre Datenbank zugreift, bekommen sie nur die Hashes und sie sollten nicht für Passwörter funktionieren. Ich andere Worte, behalte es in einer Richtung. Sie werden sehr viel bcrypt-ruby sehen, aber jetzt ist es nur bcrypt und ist ein C-Erweiterungstyp, so dass Sie das mit Windows unter einigen hinzugefügten Entwicklungswerkzeugen kompilieren müssen. Du hast Recht, sie sind sperrig. https://sideprojectsoftware.com/blog/2015/02/22/sinatra-authentication sollte helfen. –