我们有一位客户想要在他们的用户表的“来源”使用他们当前的Wordpress网站。
(如果它有所不同,rails应用程序将成为Web前端以及iOS和Android前端的主要应用程序界面。)
因此,用户将通过网站登录,并且想法是使用email / pwd对Wordpress进行API调用。它会返回一个成功的身份验证。然后,我会向移动平台发出令牌或类似内容,以允许他们继续访问。
关于如何使认证件在rails之间工作的任何想法 - > WordPress的?
答案 0 :(得分:1)
如果其他人想要完成同样的事情。这是我解决问题的方法。首先,我的wordpress实例和rails实例位于同一个盒子上,这使得该解决方案可行。
1)我在rails侧使用devise进行身份验证。我已经为"身份验证创建了一个覆盖!"方法,检查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)
2)这调用一个简单的方法,我只需调用wordpress实例来验证用户是否存在。 (我试图找到一种方法直接检查数据库表,但WP密码哈希不是我想解决的问题)
3)在wordpress方面(以及其他一些东西):
$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';
}