如何为Rails设置远程json API以进行身份validation和会话
我是rails的新手,对Devise Gem有一个非常基本的了解。 除了CRUD和观点我不清楚它提供什么可以帮助我使用AngularJs应用程序与Rails Json Api交谈。
目前,我正在努力推动事物。 为了安全,我在客户端(js)和服务器之间交换HTTP标头令牌。 我也使用Railscast#250进行用户身份validation – 但我没有看到如何将SessionController应用于远程客户端。
是否有任何策略可用于通过远程json API进行身份validation和管理会话?
谢谢!
我个人不会为这样的东西使用设计,因为它只有你要使用的一小部分
别
你几乎不使用会话。 您需要做的就是每次都传递基本身份validation,并在应用程序控制器中确定它是否有效,如果不是只是发回一个身份validation错误。
示例请求: http://username:password@example.com/api/endpoint
class ApplicationController before_filter :check_auth! private def check_auth! username, password = ActionController::HttpAuthentication::Basic::user_name_and_password(request) user = User.find_by(username: username) if user && user.encrypted_password == SomeEncryptFunction(params[:password]) @current_user = user else raise "error" end end end
但如果你想……
然后你可以做的是在用户第一次授权(开始他们的会话)时更新用户的DateTime
字段,然后在后续调用中他们可以传递你给他们的令牌,每次他们登录时你检查它。你也检查自第一次刷新以来仅经过了一定时间,否则其会话无效。
class SessionsController < ApplicationController skip_before_filter :check_auth! before_filter :login! private # Note: I don't remember the actual devise method for validating username + password def login! user = User.find_by(username: params[:username]) if user && user.valid_password(params[:password]) current_user = user current_user.update_attributes( authenticated_at: DateTime.now, authentication_token: Devise.friendly_token ) else raise "error" end end end class ApplicationController before_filter :check_auth! private def check_auth! if valid_token(params[:token]) current_user = User.find_by(authentication_token: params[:token]) else raise "error" end end # Returns true if token belongs to a user and is recent enough def valid_token(token) user = User.find_by(authentication_token: params[:token]) user && user.authenticated_at < DateTime.now - 1.day end end
- 如何在Devise’注册’页面中添加其他字段?
- carrierwave,Excon :: Errors :: MovedPermanently in RegistrationsController #update error
- Rails设计:登录后如何访问注册页面?
- `method_missing’:用户的未定义方法`devise’(调用’User.connection’建立连接)
- Rails 5&Devise:最小密码长度不起作用
- 没有路线匹配“/ logout”
- Rails / Devise – 确定用户会话何时到期
- 设计:未定义的方法`user_signed_in?’ for ApplicationController:Class
- “rake db:seed”和rake db:fixtures:load“之间的区别是什么?