Restful-Authentication

3 09 2008

หลังจากห่างหายจาก 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 = :smtp
ActionMailer::Base.perform_deliversies = true
ActionMailer::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


เลือกคำสั่ง

ข้อมูล

ใส่ความเห็น