March 16, 2015

Autentikáció Rails-ben Devise gem-mel

A Devise gem lehetőséget nyújt arra, hogy Rails alkalmazásunk bizonyos funkció egyszerűen és profin védve legyenek - csak regisztrációt és bejelentkezést követően legyenek elérhetők.

Telepítés

Hozzáadjuk a Gemfile-hoz a Devise-t:

gem 'devise'

Futtatunk egy bundle telepítést parancssorban:

bundle install

Generálunk egy alap konfigurációt az alkalmazáshoz:

rails generate devise:install

Következő lépésként létrehozzuk a User model-t:

rails generate devise user

Ez a config/routes.rb fájlba is beírja, hogy van ilyen devise dolog.

Védelem a controller-ben

Következő lépésként beállíthatjuk, hogy melyik controller-nek melyik method-jait akarjuk autentikációhoz kötni. Íme egy példa (app/controllers/testcases_controller.rb)

before_filter :authenticate_user!, only: [:new, :edit, :create, :update, :destroy]

A fenti példában a szögletes zárójelben felsoroltak lesznek bejelentkezéshez kötve. Tehát a _CRUD-_ból (Create Read Update Destroy) az R kivételével minden (tehát csak megtekinteni lehet anélkül, hogy bejelentkeznénk).

Védelem a view-ban

A view-okban is beállíthatjuk, hogy egyes elemek csak akkor jelenjenek meg, ha bejelentkezett a kedves felhasználó. Például az app/views/testcases/index.html.erb fájlban:

<% if user_signed_in? %>
  <%= link_to 'Edit', edit_testcase_path(testcase)  %>
  <%= link_to 'Delete', testcase, method: :delete, data: { confirm: 'Are you sure?' } %>
<% end %>

Így a szerkesztés és törlés gombok bejelentkezés nélkül nem is lesznek láthatóak.

További információ a Devise-ról

Getting started GitHub-on: https://github.com/plataformatec/devise#getting-started

Rubydoc dokumentáció: http://www.rubydoc.info/github/plataformatec/devise/

Nandor Biro

Software Engineer working at Whereby, lover of all things countryside, life-long learner with a passion for IT and woodworking. Find him on Twitter.