Auth stuff
Authentication
Checking that the person trying to sign in is the user they claim to be.
Authorization
Checking if the user is allowed (authorized) to perform a specific action.
get '/articles/:article_id/edit'
@article = Article.find(params[:article_id])
@user = ... # not important now
if @article.author == @user
erb :edit
else
erb :forbidden
end
end
@current_user = User.find_by(
email: params[:email],
password: params[:password]
)
Hash passwords
- Hashes passwords so unreadable
- "password" -> "UfJPEBC7B4.jwDV7aIC0u2..."
# create_table :users do |t|
# t.string password_digest
# end
class User < ActiveRecord::Base
private
attr_reader :checkable_pass
public
def check_password(attempt)
if checkable_pass == nil
self.checkable_pass =
BCrypt::Password.new(password_digest)
end
checkable_pass == attempt
end
def set_new_password(plain_password)
self.password_digest =
BCrypt::Password.create(plain_password)
end
end
def password
@checkable_pass || BCrypt::Password.new(password_digest)
end
def password=(plain_password)
@checkable_pass = BCrypt::Password.create(plain_password)
self.password_digest = @checkable_pass
end
def authenticate(attempt)
@checkable_pass == attempt
end
Hashing vs. Encryption
pw = "12345"
pw.hash!
puts pw
# => 2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
pw = "12345"
pw.encrypt!
puts pw
# => 1jf83
pw.decrypt!
puts pw
# => 12345
Session
How to store user information between pages?
the web is stateless
Store user's IP address and query it every page load?
What if they changed their IP?
require 'sinatra'
configure do
enable :sessions
end
get '/' do
session[:message] || "blank message for now"
end
get '/message' do
session[:message] = "this is the secret message!"
"You found the message."
end
auth&auth
By Isaac
auth&auth
- 452