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.
Ajetaan lopuksi tietokantamigraatiot komennolla
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ä:
Jos et jaksa kirjoittaa tuota niin voit myös kopioida formin koodin täältä .
UsersControllerin user_params-metodiin täytyy lisätä sallittaviksi parametreiksi password ja password_confirmation seuraavalla tavalla:
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
Create-metodi ei ole vielä valmis. Siihen täytyy toteuttaa salasanan tarkistus ja sen perusteella joko sisäänkirjautumisen hyväksyminen tai hylkääminen. Tehdään ensin kuitenkin valmiiksi kirjautumisview. Lisää tiedosto app/views/istuntos/new.html.erb-tiedosto (vaatii istuntos-kansion luonnin ensin). Koodaa sen sisällöksi, jos et jaksa koodata niin kopioi täältä. Kirjautumissivu tulee osoitteeseen localhost:3000/istunto/new
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'