Ruby on rails 对Rails应用程序使用Wordpress身份验证-从Rails到Wordpress之间的SSO

Ruby on rails 对Rails应用程序使用Wordpress身份验证-从Rails到Wordpress之间的SSO,ruby-on-rails,wordpress,api,devise,Ruby On Rails,Wordpress,Api,Devise,我们有一位客户希望在用户表的“源”中使用他们当前的Wordpress站点 (如果有区别,rails应用程序将成为web前端以及iOS和Android前端的主要应用程序界面。) 因此,用户将通过网站登录,其想法是通过电子邮件/pwd向Wordpress进行API调用。它将返回一个成功的身份验证。然后,我会向移动平台发放一个令牌或类似的东西,以允许他们继续访问 你有没有想过如何在rails->wordpress之间进行身份验证?以防其他人想要完成同样的事情。下面是我如何解决这个问题的。首先,我的wo

我们有一位客户希望在用户表的“源”中使用他们当前的Wordpress站点

(如果有区别,rails应用程序将成为web前端以及iOS和Android前端的主要应用程序界面。)

因此,用户将通过网站登录,其想法是通过电子邮件/pwd向Wordpress进行API调用。它将返回一个成功的身份验证。然后,我会向移动平台发放一个令牌或类似的东西,以允许他们继续访问


你有没有想过如何在rails->wordpress之间进行身份验证?

以防其他人想要完成同样的事情。下面是我如何解决这个问题的。首先,我的wordpress实例和rails实例位于同一个框中,这使得这个解决方案可行

1) 我使用Desive在rails端进行身份验证。我已经为“authenticate!”方法创建了一个覆盖,该方法检查wordpress

require 'devise/strategies/authenticatable'

module Devise
  module Strategies
    class DeviseOverride < Authenticatable
      def valid?
        true
      end

      def authenticate!
        if params[:user]
          user = User.find_by_email(params[:user][:email])
          # user = User.first
          if user # && user.encrypted_password == params[:user][:password]
            #check password with Wordpress to verify it is a good user
            result = WordpressApi.verify_user(params[:user][:email], params[:user][:password])

            if result
              success!(user)
            else
              fail!("Couldn't verify your login. Please try again.")
            end
          else
            fail!("Could not log in")
          end 
        else
          fail!("")
        end 
      end 
    end 
  end 
end

Warden::Strategies.add(:local_override, Devise::Strategies::DeviseOverride)
$user = get_user_by('email', $email);
        // print $user->data->user_email;
        if ($user && wp_check_password( $pwd, $user->data->user_pass, $user->ID) )
            return_json_success('Valid User', 'user', $user);
        else{
            return_json_error('Passwords do not match', 200);
            // print "Password: {$pwd}, User: {$user} UserPass: {$user->data->user_pass}  UserID: {$user->ID}";
            // print 'Passwords do not match';
        }