我基本上遵循https://github.com/mattconnolly/devise-custom-strategy-demo/blob/master/lib/my_authentication.rb
一切正常,但是有一个错误,如果我是我的应用程序的新用户(当然我的用户信息已经在我们的中央身份验证服务器中),我必须第一次登录两次才能使用该应用程序
我的authenticate!
:
def authenticate!
# mapping comes from devise base class, "mapping.to" is the class of the model
# being used for authentication, typically the class "User". This is set by using
# the `devise` class method in that model
klass = mapping.to
# login credentials
username = params[:user][:email] # The username is the email field
password = params[:user][:password]
begin
# Here is the code to authenticate
# Basically, we are sending the credentials to another central authentication server
# If the authentication fails, it will throw an exception, which will be caught below to fail!
user = klass.find_or_initialize_by_email(username)
puts "user: #{user.inspect}"
success! user
rescue Exception => e
failureMessage = "Auth error: #{e.inspect}"
puts "#{failureMessage}"
fail! failureMessage
end
# if we wanted to stop other strategies from authenticating the user
end
在我的User
模型中:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :my_authentication,
:rememberable, :trackable
# Setup accessible (or protected) attributes for your model
attr_accessible :username, :first_name, :last_name, :remember_me, :email
end
如您所见,我根本没有使用database_authenticatable
,但我们需要将一些用户信息从中央服务器保存到我们的应用程序服务器。
我猜是因为:
user = klass.find_or_initialize_by_email(username)
puts "user: #{user.inspect}"
success! user
但我不知道如何修改它,以便新用户不必登录两次即可使用该应用程序。