在RAILS中使用CAS 客户端( cas client for rails)
访问量: 4930
Ruby 客户端 使用方法
0. 在 Gemfile中,加入:
gem 'rubycas-client', :git => 'git://github.com/rubycas/rubycas-client.git' (要用这个版本,否则 会出现undefine method before ...)
然后 $sudo bundle
注意: 不要使用 'rubycas-client-rails' 这个GEM。这个gem会使得你的配置过程不透明,难于调试。
1. environment.rb: 的结尾,加上:
CASClient::Frameworks::Rails::Filter.configure(
:cas_base_url => "http://10.103.13.121:333"
)
2 对应的controller 中, 加上:
before_filter CASClient::Frameworks::Rails::Filter
注意: 不要在 application_controller中加这句。否则的话所有的controller, 包括登录页面都会受影响。
注意2: 在 > Rails 4.2的版本中, 要把 before_filter 换成 before_action
注意3: 有了这一句,就不用原来的 before_action :auth_user 等等这样的用法了. (就是去掉devise 的验证)
3. 在sessions_controller.rb 中定义退出的action:
class SessionsController < ApplicationController
def destroy
CASClient::Frameworks::Rails::Filter.logout(self)
end
end
4. 修改 route.rb ,加入退出的链接:
PaddyField::Application.routes.draw do
resources :fish
match '/logout' => "sessions#destroy", :as => :logout, :via => :delete
end
5. 修改 application.html.erb 布局文件,增加这个链接。
关键的一点是: 在经典的rails authorization 框架用,都是用 current_user 这个变量取得当前登陆的用户。 在CAS CLIENT中,用的是 session[:cas_user] , 只取得当前用户名,是一个string. 而不是一个model.
<div style="border: 1px solid green">
<%= session[:cas_user] %>
</div>
<% if session[:cas_user] %>
<%= link_to "logout" , logout_path %>
<% end %>