正在用 padrino,尝试利用 warden_omniauth 做用户认证和注册。 单个 sns 帐号认证没有问题,但是想在此基础上实现 devise 那样的多帐户关联。 但是发现 warden 的 session 只要有被认证的用户,就会跳过调用新的 stragegy 的过程。
看了 warden 的代码。lib/warden/proxy.rb 第 319 行,直接用 return 把后续的处理跳过了。
def _perform_authentication(*args)
scope, opts = _retrieve_scope_and_opts(args)
user = nil
# Look for an existing user in the session for this scope.
# If there was no user in the session. See if we can get one from the request.
return user, opts if user = user(opts.merge(:scope => scope))
_run_strategies_for(scope, args)
if winning_strategy && winning_strategy.user
opts[:store] = opts.fetch(:store, winning_strategy.store?)
set_user(winning_strategy.user, opts.merge!(:event => :authentication))
end
[@users[scope], opts]
end
想知道大家用 warden 的时候是怎么实现相关处理的。