首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有动态devise_cas_authenticatable的cas_base_url

具有动态devise_cas_authenticatable的cas_base_url
EN

Stack Overflow用户
提问于 2014-06-03 15:16:54
回答 2查看 582关注 0票数 1

使用Rails、Devise和devise_cas_authenticatable,我希望根据某些内部配置使用不同的CAS服务器。

由于cas_base_url是在初始化器中设置的,因此在前置筛选器中重写该值如下:

代码语言:javascript
复制
Devise.setup do |config|
  config.cas_base_url="my_custom_variable_cas_server"
end

一旦调用了before_filter,然后调用了:authenticate_user!,在第一次运行时,将设置自定义cas服务器,但在此之后,它将被缓存或执行某些操作,并且不会被修改。

在环境/Development.rb中,config.cache_classes = false。

是否有任何方法来扩展、设计或重写指定哪个是devise_cas_authenticatable的登录url的函数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-09 07:55:06

解决方案是在lib文件中重新定义cas中的“新”操作:

  1. 在/lib中创建一个名为devise_cas_authenticatable_extender.rb的新文件,或创建您喜欢的任何其他名称。 触摸库/设计_cas_验证_扩展.lib
  2. 复制并粘贴以下文本insideThis库是CAS认证动态工作所必需的#注意:如果从应用程序控制器调用它会引发循环依赖.#.当使用瘦(而不是rails )#时出错,必须在每个使用Devise::CasSessionsController.class_eval身份验证的控制器中使用它,do #我们重新定义了新动作的行为,使其成为动态的def新的domain=request.protocol + ((request.port.blank?欧元- request.port==80)?request.host:"#{request.host}:#{request.port}") # Production servicio=domain+/users/service“servicio=servicio.gsub(':','%3A').gsub('/','%2F') #这很可能可以用URI url="path]}/login?service=#{servicio}”redirect_to url end来完成。
  3. 在使用身份验证的控制器中插入以下内容(注意:如果使用application_controller.rb,可能会出现circular_dependency错误,我没有解决这个问题,因为我不使用application_controller.rb进行会话操作).This库是CAS身份验证动态工作所必需的#注意:如果从应用程序控制器调用它会引发循环依赖.#.使用瘦(而不是用rails )#时出错,必须在每个使用devise_cas_authenticatable_extender身份验证的控制器中要求它‘’
  4. 在代码中的某个位置,将session:dynamic_url_path变量设置为在项目中有意义的内容,例如: request.path_parameters:your_routes_path_variable_here = session:dynamic_url_path
  5. (就是这样:)
票数 2
EN

Stack Overflow用户

发布于 2015-10-07 13:54:48

我使用了这个解决方案,并且在生产环境中运行的应用程序(由于eager_load配置)得到了循环依赖错误。

最后,我让它可以在config/environments.rb s.rb文件中插入require 'devise_cas_authenticatable_extender‘。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24018860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档