Berikut ini sedikit tip n trik untuk membuat aplikasi Ruby and Rails (RoR) yang berjalan di platform Linux Ubuntu 13. Masuk ke Terminal:
rails new simple-auth -d postgresql
Maksudnya adalah membuat project baru RoR dengan nama simple-auth dan database postgresql. Jika selesai, nanti di folder /home akan muncul folder simple-auth. Masuk ke folder tersebut dengan mengetik:
cd simple-auth
Di sana anda akan menjumpai folder Gemfile yang harus sedikit diedit untuk mengaktifkan bahasa ruby. Cara mengaktifkannya adalah dengan menghapus symbol “#”.
SImpan dan jangan lupa setiap melakukan perubahan pada file Gem, kita harus melakukan bundle install. Masuk ke terminal, jalankan:
bundle install
Sekarang kita harus melakukan perubahan pada postgresql, yakni pada file database.yml yang terletak di folder Config pada folder aplikasi kita (Simple-Auth). Ganti seluruh user dengan nama superuser postgresql, misalnya csim. Setelah itu jangan lupa menekan tombol simpan ‘save’. (Note: ada tiga yang harus dirubah).
Jangan lupa setiap melakukan perubahan pada configurasi database.yml, lakukan rake:
rake db:create:all
rake db:migrate
Berikutnya kita akan membuat controller dengan nama ‘new’. Rails termasuk framework Model View Controller (MVC). Buat dengan cara mengetik:
rails g controller users new
Akan terbentuk controller dengan nama new. Begitu juga untuk model user, buat:
rails g model user email:string password_hash:string password_salt:string
Lakukan migrate database
rake db:migrate
Cari file UsersController di folder /app/controller. Ekstensinya adalah ‘.rb’. Isi program seperti contoh berikut ini:
Berikutnya masukan kode berikut untuk views pada new.html
-
<h1>Sign Up</h1>
-
<%= form_for @user do |f| %>
-
<% if @user.errors.any? %>
-
<div class=”error_messages”>
-
<h2>Form is invalid</h2>
-
<ul>
-
<% for message in @user.errors.full_messages %>
-
<li><%= message %></li>
-
<% end %>
-
</ul>
-
</div>
-
<% end %>
-
<p>
-
<%= f.label :email %><br />
-
<%= f.text_field :email %>
-
</p>
-
<p>
-
<%= f.label :password %><br />
-
<%= f.password_field :password %>
-
</p>
-
<p>
-
<%= f.label :password_confirmation %><br />
-
<%= f.password_field :password_confirmation %>
-
</p>
-
<p class=”button”><%= f.submit %></p>
-
<% end %>
Untuk masalah enkripsi, kita tinggal memakai bundel yang ada pada file Gem, buka kembali Gemfile, masukan gem “bcrypt-ruby”, :require => “bcrypt”
Jangan lupa, lakukan lagi bundle install setiap kali melakukan perubahan pada Gemfile.
bundle install
Buka file user.rb pada folder /app/models/ dan isikan kode berikut ini:
-
before_save :encrypt_password
-
def self.authenticate(email, password)
-
user = find_by_email(email)
-
if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
-
user
-
else
-
nil
-
end
-
end
-
def encrypt_password
-
if password.present?
-
self.password_salt = BCrypt::Engine.generate_salt
-
self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
-
end
-
end
Tambahkan pula attribute berikut (dibawah before save):
-
attr_accessor :password
-
before_save :encrypt_password
-
validates_confirmation_of :password
-
validates_presence_of :password, :on => :create
-
validates_presence_of :email
-
validates_uniqueness_of :email
Hal yang berikut ini sangat penting, yaitu routing, di sini kita mengarahkan user ketika menekan tombol tertentu. Tambahkan code ini pada folder route.rb yang terletak di folder /app/models. Sisipkan di bawah get “users/new” tiga baris berikut ini:
Coba jalankan RoR dengan melakukan instruksi di bawah ini:
rails server
Biarkan console seolah-oleh hang, yang tandanya server sedang bekerja. Jika ingin mematikannya tinggal menekan Ctrl-C. Buka browser dan link pada http://localhost/3000
Coba klik Create user, lihat apa yang terjadi. Coba masuk ke database. Apakah sudah tersimpan? Misalnya saya masukan email: rahmadya@yahoo.com