我目前正在向 Rails 教程中的示例应用程序添加一个 RESTful API,并且我正在尝试使用门卫来保护它,而无需其他宝石,如设计或许可。我希望门卫根据现有会话对用户进行身份验证。当前的会话实现remember_token
在浏览器 cookie 中保留 a(在登录时分配)并将散列令牌存储在 User 模型中。
我current_user
在模块中有一个方法SessionsHelper
(app/helpers/sessions_helper.rb),它也包含在 ApplicationController 中:
def current_user
remember_token = User.digest(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
这是resource_owner_authenticator
(其他失败的实现被注释掉):
resource_owner_authenticator do
# fail "Please configure doorkeeper resource_owner_authenticator block located in #{__FILE__}"
# Put your resource owner authentication logic here.
# Example implementation:
# User.find_by_id(session[:user_id]) || redirect_to(new_user_session_url)
# puts current_user || "no user"
# current_user # || redirect_to(signin_path)
# remember_token = User.digest(request.cookies[:remember_token])
# User.find_by(remember_token: remember_token)
# puts "in resource_owner_authenticator"
current_user
end
这是来自一个 GET 请求的错误:
Started GET "/users/1" for 127.0.0.1 at 2014-08-24 12:40:25 -0400
Processing by UsersController#show as HTML
Parameters: {"id"=>"1"}
Filter chain halted as #<Proc:0x007f294c886310@/home/mike/.rvm/gems/ruby-2.0.0-p481@railstutorial_rails_4_0/gems/doorkeeper-1.4.0/lib/doorkeeper/helpers/filter.rb:8> rendered or redirected
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)
首先,我想知道是否可以在没有设计或许可的情况下进行身份验证,即使可以,是否可取。其次,我不确定究竟有什么可用的Doorkeeper.configure
- 是current_user
?是饼干吗?如果有人能看到我在这里做错了什么,谢谢。我正在使用 Rails 4 和 Doorkeeper 1.4.0。