Skip to content

Instantly share code, notes, and snippets.

@prp-e
Created June 4, 2020 22:31
Show Gist options
  • Save prp-e/91ad2491ffa8926a4c5ff67268078b1f to your computer and use it in GitHub Desktop.
Save prp-e/91ad2491ffa8926a4c5ff67268078b1f to your computer and use it in GitHub Desktop.
Sinatra auth app
require 'bcrypt'
require 'sinatra'
require 'sequel'
database = Sequel.connect("sqlite://db.sqlite")
###
#database.create_table :users do
# primary_key :id
# String :username
# String :password
#end
###
users = database[:users]
def hash_password(password)
BCrypt::Password.create(password).to_s
end
def test_password(password, hash)
BCrypt::Password.new(hash) == password
end
#User = Struct.new(:id, :username, :password_hash)
#Users = [User.new(1, "user", hash_password("1234"))]
#### Sinatra Code Begins Here ####
enable :sessions
helpers do
def current_user
if session[:user_id]
users.where(:id => session[:user_id]).get(:id) == session[:user_id]
else
nil
end
end
end
get '/' do
if current_user
"Hello!"
else
"Not logged in"
end
end
get '/login' do
erb :login
end
post '/login' do
#user = Users.find { |u| u.username == params[:username] }
pass = hash_password(users.where(:username => params[:username]).get(:password))
if test_password(hash_password(params[:password]), pass)
user = users.where(:username => params[:username]).get(:id)
puts user
session.clear
session[:user_id] = user
redirect '/'
end
end
get '/signup' do
erb :signup
end
post '/signup' do
if params[:password]
users.insert(:username => params[:username], :password => hash_password(params[:password]))
redirect '/'
else
redirect '/signup'
end
end
get '/logout' do
session.clear
redirect '/'
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment