我正在使用Devise + Omniauth,我定义了自己的门卫策略来添加语言选项
在config / initializers / devise.rb中,我设置了:
require 'omniauth/strategies/doorkeeper'
config.omniauth :doorkeeper, Rails.application.secrets.doorkeeper_app_id, Rails.application.secrets.doorkeeper_app_secret,
:client_options => {
:site => Rails.application.secrets.doorkeeper_url
},
:authorize_params =>{:lang => I18n.locale}
最初将lang设置为:en(默认语言环境)
这很好用,并将lang选项发送到远程服务器进行门卫处理
现在,如何在客户端呼叫控制器中更改此参数? 我试着用:
def index
I18n.locale = :fr
Rails.application.config.middleware.use OmniAuth::Builder do
provider :doorkeeper, :setup => lambda{|env| env['omniauth.strategy'].options[:authorize_params][:lang] = env['rack.session'][I18n.locale] }
end
但是我收到了一个错误:
RuntimeError (can't modify frozen Array):
app/controllers/home_controller.rb:7:in `index'
有没有更好的方法呢?谢谢你的帮助
答案 0 :(得分:0)
我修改了config / initializers / devise.rb,添加:setup =>真
require 'omniauth/strategies/doorkeeper'
config.omniauth :doorkeeper, Rails.application.secrets.doorkeeper_app_id, Rails.application.secrets.doorkeeper_app_secret,
:client_options => {
:site => Rails.application.secrets.doorkeeper_url
},
:authorize_params =>{:lang => I18n.locale},
:setup => true
我修改了我的门卫策略,包括setup_phase,我在其中将lang选项设置为当前语言环境。
def setup_phase
request.env['omniauth.strategy'].options[:authorize_params][:lang] = request.params["locale"]
end