หลังจากห่างหายจาก Rails ไปนานในที่สุดก็กลับมารื้อฟื้นอีกครั้ง
งานที่โดน Assign มาก็เป็นเรื่องของการใส่ระบบ User
ซึ่งก็ใช้ Plugin restful-authentication ซึ่งจะช่วยในการทำระบบ User
หลังจากลง Plugin ตัวนี้แล้วนะครับ
(จะใช้การ Install ลงใน Project หรือ Copy ไปวางใน ./vendor/plugins ก็แล้วแต่)
ก็เริ่มจากการใช้คำสั่ง
ruby script/generate authenticated user sessions —include-activation
เพื่อให้ Plugin สร้าง user และ sessions ขึ้นมาและให้มีระบบ Activation ด้วย
ต่อมาก็เริ่มสร้าง DB ด้วยคำ่สั่ง
rake db:migrate
เนื่องจากต้องมีการ Activation เราต้องไปบอกที่ Route ด้วย
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate'
เพื่อให้สามารถ Link ไปที่ /activate ได้
ไปปรับที่ ./config/environment.rb เพราะเราต้องการให้มีการ Activation ทาง email
config.active_record.observers = :user_observer
หลังจากนั้นเราจะไปทำการตั้งค่าของ Mail Server โดยไปสร้างไฟล์ mail.rb ที่ ./config/initializers แล้วตั้งค่า
ActionMailer::Base.delivery_method = :smtpActionMailer::Base.perform_deliversies = trueActionMailer::Base.smtp_settings = {:address => "mail.example-domain.com",:port => 25,:domain => "www.example-domain.com",:authentication => :login,:user_name => "user@example-domain.com",:password => "secret"}
หลังจากนั้นไปที่ ./app/models/user_mailer.rb
เปลี่ยน YOURSITE เป็นชื่อ Web Site ของคุณ
ไปที่ ./app/views/layouts/application.html.erb เพิ่ม
<p style="color: green"><%= flash[:notice] %></p><p style="color: #990000"><%= flash[:alert] %></p>
เพื่อให้แสดง Message ต่างๆ
ถ้าใช้การ Generate ดังที่กล่าวในข้างต้นนะครับจะเกิดปัญหา
undefined method `recently_activated?’ for
ให้แก้ไขโดยการเข้าไปที่ ./app/models/user.rb และเพิ่ม
include Authorization::StatefulRoles
การตรวจสอบ Login ก็ใช้
if logged_in?
และสามารถตรวจสอบ User ที่กำลังใช้งานจาก
current_user
เราสามารถสร้าง Link ของทุกหน้าโดยไปแก้ที่ ./app/views/layouts/application.html.erb
<ul>
<% if logged_in? %>
<li>
<b><%= current_user.login %></b><br/>
<%= link_to ‘Logout’, logout_url %>
</li>
<% else %>
<li><%= link_to “Signup”, signup_url %></li>
<li><%= link_to ‘Login’, login_url %></li>
<% end %>
</ul>
สำหรับบางคนอาจเจอปัญหา
“Plugins::Restful-authentication::Lib” is not a valid constant name!
วิธีแก้ไขก็ไปดูที่ Folder ของ Restful-Authentication ใน Folder ./vendor/plugins นะครับ
ให้ดูชื่อของ Folder อย่าให้มีตัวอักษรพิเศษ (พวก “-” ) ถ้ามีก็เปลี่ยนชื่อ
เช่น restful-authentication => restful_authentication
ที่มา : http://www.avnetlabs.com/rails/restful-authentication-with-rails-2