gpt4 book ai didi

ruby-on-rails - 使用 Authlogic 和 Authlogic OAuth 插件隐式创建用户

转载 作者:数据小太阳 更新时间:2023-10-29 06:34:46 26 4
gpt4 key购买 nike

我正在尝试在 Rails 中编写一个简单的 OAuth 消费者应用程序。我正在使用 Authlogic 处理身份验证,并使用 Authlogic OAuth 插件来执行 oauth。

oauth 插件提供了几个助手来呈现登录按钮:oauth_login_button 和 oauth_register_button。与 Authlogic 逻辑和插件的请求过滤器一起,这两个按钮以某种方式创建了 session /用户。

接下来发生的事情如下:- 如果我使用 oauth_login_button 助手,则 session 对象无法保存,因为本地没有这样的用户。- 如果我使用 oauth_register_button 助手,那么,在第一次登录后的任何登录中,Rails 都会提示 token 已经被占用......这意味着它无法为同一用户创建第二个副本,这是正确的。

问题是:我不想在我的网站上同时拥有注册和登录按钮。

在用户端,我想实现的是在起始页上有一个按钮,说smth。例如“使用 Twitter 登录”,用户必须单击它才能进入网站的内部页面。

在服务器端,如果用户是我网站的首次访问者,我想隐式创建本地用户帐户。

关于如何执行此操作的任何提示?

我在 Authlogic+OAuth 上找到的所有示例似乎都不关心只有一个登录按钮。:(

最佳答案

看来我要自己回答这个问题了。

我使用以下代码生成登录按钮(在 HAML 中):

- form_tag({:controller => "users", :action => "create"}, {:method => "post"}) do
= oauth_register_button :value => "Sign In with Twitter"

然后如果用户已经存在,我只需在 UsersController 类的创建方法中创建用户的 session 对象:

def create
@user = User.new(params[:user])
@user.save do |result| # LINE A
if result
flash[:notice] = "Account registered!"
redirect_to some_inner_path
else
unless @user.oauth_token.nil?
@user = User.find_by_oauth_token(@user.oauth_token)
unless @user.nil?
UserSession.create(@user)
flash.now[:message] = "Welcome back!"
redirect_to some_inner_path
else
redirect_back_or_default root_path
end
else
redirect_back_or_default root_path
end
end
end
end

如果用户是第一次访问,则用户对象成功保存在 LINE A 中。如果不是,并且有可用的 oauth token ,那么我们尝试从数据库中获取用户并记录他/她中。

关于ruby-on-rails - 使用 Authlogic 和 Authlogic OAuth 插件隐式创建用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1180076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com