0

我目前正在开发一个 Rails Spree 应用程序(v 1.3.x)。

我还有几个月前创建的另一个应用程序,假设myfirstapp.com是实时的,并且有这么多用户在此应用程序上创建了帐户,所以他们现在是注册用户。

所以,现在我想在我目前正在开发的新应用程序中假设它是 **mysecondapp.com以允许注册用户(即在 myfirstapp.com 上创建帐户的用户)在我的第二个应用程序中登录而不使用我的第二个应用程序注册过程。他们应该从 myfirstapp.com 进行身份验证并进入我的 secondapp。**

有什么办法可以做到这一点?

4

1 回答 1

0

我认为您可以在第二个应用程序上使用您的第一个应用程序身份验证,您可以创建一个链接,就像 facebook 或 twitter 一样,重定向到控制器,然后这个控制器向您的第一个应用程序发送请求(您需要安全代码来做到这一点) 然后得到响应,保存你想要的数据(user_id 或帐户)并且效果很好......

使用protect_from_forgery 的API 类:

class ApiController < ApplicationController
    protect_from_forgery :except => 'custom_login'
end

这样做可以避免默认的 rails 保护,并验证

<%= hidden_field_tag :authenticity_token, form_authenticity_token -%>

常用于导轨形式。然后你可以实现你的秘密哈希码,并像这样验证它:

class ApiController < ApplicationController
protect_from_forgery :except => :login_from_app2

def login_from_app2
    if params[:authentication] == auth_hash
        if login(params[:user_credentials])
            render :text => "Success" #better you return a json
        else
            render :text => "Fail login" #better you return a json
        end
    else
        render :text => 'Invalid security hash'
    end
end


def auth_hash
    "8f2e4b354f193744272fe246ca9e8bf5"
end

end

这样,您只有 app2 的代码将发送“发布”请求以访问 app1,您可以控制登录。

我不知道这是否 100% 安全,我认为是,但如果有人能解释为什么在这种情况下这不是一个好方法,我会很高兴。

于 2013-05-22T14:31:50.047 回答