Salasanoja ei tallenneta tietokantaan selväkielisinä. Tavallista on, että salasanasta generoidaan yksisuuntainen hash eli tiiviste. Tiivisteestä ei pysty päättelemään salasanaa, mutta samasta salasanasta algoritmi generoi aina samanlaisen tiivisteen ja näin voidaan kirjautuessa tarkistaa, onko käyttäjän antama salasana oikea salasana. Otamme käyttöön BCrypt-kirjaston turvallisen salasanajärjestelmän luomiseen. Lisää Gemfileen
gem 'bcrypt', '~> 3.1.7'
ja aja
bundle install
Käyttäjään pitää lisätä password_digest-attribuutti, johon tiiviste sitten tallentuu tietokantaan. Tehdään se komennolla
rails g migration AddPasswordDigestToUser password_digest:string
Sen jälkeen User-model tulee saada näyttämään tältä, has_secure_password-metodin kutsumisen lisäys liittyy BCryptin toimintaan. Has_secure_password lisää User-olioon password ja password_confirmation-kentät. Jos näiden arvot eivät ole samat, Userin tallennus tietokantaan ei tule onnistumaan.
rake db:migrate
Lisätään vielä käyttäjän luomisen viewiin eli app/views/users/_form.html.erb -tiedostoon ennen submit-tagia salasanan ja salasanan vahvistuksen syöttökentät eli kyseisen tiedoston tulisi lisäyksen jälkeen näyttää tältä:
Railsin sessio-muuttujaan saa tallennettua arvoja seuraavalla tavalla:
session[:user_id] = "arvo"
Käyttäjällä voi olla kerrallaan vaan yksi istunto. Istunnolle ei tarvitse luoda Modelia, koska se ei ole tietokantaan tallennettava olio. Istunto on siis resurssi jolle luomme Controllerin ja reitityksen. Lisäämällä seuraavan rivin config/routes.rb-tiedostoon tehdään kirjautumissivuksi istunto/new.
resource :istunto, only: [:new, :create, :destroy]
Luodaan seuraavaksi IstuntosController tiedostoon app/controllers/istuntos_controller.rb
if 1 < 2
  print "ifissä"
else
  print "elsessä"
end
Vertailun ja kertauksen vuoksi sama toteutetaan Javassa näin:
if(1 < 2) {
  System.out.println("ifissä");
} else {
  System.out.println("elsessä");
}
user.authenticate(params[:password])
redirect_to :back
redirect_to user_path(user)
user.id
Tämän palapelin jälkeen kun sisäänkirjautuminen onnistuu, lisätään config/routes.rb-tiedostoon reitti uloskirjautumiselle seuraavasti:
get 'signout', to: 'istuntos#destroy'