Sprankelprachtig aan/afmeldsysteem

authentication_helper.rb 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. module AuthenticationHelper
  2. def log_in(user, remember, new=true)
  3. reset_session
  4. expiry = 6.hours.since
  5. session[:user_id] = user.id
  6. session[:expires] = expiry
  7. if new
  8. if remember == 1
  9. token = Session.new_token
  10. cookies.signed.permanent[:remember_token] = token
  11. cookies.signed.permanent[:user_id] = user.id
  12. else
  13. token = nil
  14. end
  15. s = Session.create!(
  16. user: user,
  17. ip: request.remote_ip,
  18. expires: expiry,
  19. remember_digest: token ? Session.digest(token) : nil
  20. )
  21. if remember
  22. cookies.signed.permanent[:session_id] = s.id
  23. end
  24. end
  25. end
  26. def is_logged_in?
  27. # Case 1: User has an active session inside the cookie.
  28. # We verify that the session hasn't expired yet.
  29. if session[:user_id] && session[:expires].to_time > DateTime.now
  30. return true
  31. else
  32. # Case 2: User is returning and has a remember token saved.
  33. # We get the Session, check the token and expiry, and log the user in.
  34. if cookies.signed.permanent[:remember_token] && cookies.signed.permanent[:user_id] &&
  35. cookies.signed.permanent[:session_id]
  36. s = Session.find_by(
  37. id: cookies.signed.permanent[:session_id]
  38. )
  39. if s.nil? || s.remember_digest.nil?
  40. return false
  41. end
  42. session_password = BCrypt::Password.new s.remember_digest
  43. if s.expires > DateTime.now && session_password == cookies.signed.permanent[:remember_token]
  44. log_in s.user, false, false
  45. return true
  46. end
  47. return false
  48. end
  49. return false
  50. end
  51. end
  52. end