gpt4 book ai didi

ruby-on-rails-3 - 从 Rails 设计身份验证到主干和 api?

转载 作者:行者123 更新时间:2023-12-03 00:32:43 25 4
gpt4 key购买 nike

我想将一个典型的 Rails 3.2 mvc 应用程序重建为仅 API + 前端( Backbone )。因为我没有在 Rails 中构建 API(包括身份验证)的经验:

  • 使用 Backbone 对设备进行身份验证的最佳方式是什么?使用 auth_tokens?
  • 我应该如何制作他的API?只是打印出 JSON 或使用像 Grape 这样的 gem?

提前致谢!

最佳答案

我可以向您解释我的做法:

首先,我使用设备安装一个标准 Rails 应用程序。之后,我创建自己的 session Controller :

class SessionsController < ApplicationController

def authenticate
# this method logs you in and returns you a single_access_token token for authentication.
@user = User.find_for_authentication(:email => params[:user][:email])

if @user && @user.valid_password?(params[:user][:password])
render :json => {:user => {:email => @user.email, :id => @user.id, :firsname => @user.firstname, :lastname => @user.lastname, :team_id => @user.team_id, :singleAccessToken => @user.generate_access_token}}
else
render :json => {:errors => ["Nom d'utilisateur ou mot de passe invalide"]}, :status => 401
end
end
end

如您所见,我向此 url 发送了一个请求,其 json 如下所示:

{ 
user => {
email => "myemail@toto.com",
password => "monpass"
}
}

如果一切正常,我的 Controller 会返回带有用户数据的 json,否则会出现错误。在与用户的 json 上,我返回一个在下一个请求中使用的 access_token,以检查是否允许用户请求。我在我的应用程序 Controller 中制作了这个过滤器:

class ApplicationController < ActionController::Base
protect_from_forgery

protected
def user_access_token
request.headers["HTTP_X_USER_ACCESS_TOKEN"] || request.headers["HTTP_USER_ACCESS_TOKEN"]
end

def current_user
if token = user_access_token
@user ||= User.find_by_access_token(token)
end
end

def require_user
unless current_user
render :json => {:error => "Invalid Access Token"}, :status => 401
end
end

def require_owner
unless current_user && current_user == object.user
render :json => {:error => "Unauthorized"}
end
end

end

如您所见,在下一个请求中,我将在 html header 中的键上添加 access_token:HTTP_USER_ACCESS_TOKEN

因此,我可以检查是否允许用户发出请求。

要创建 API,您可以使用 Rails API gem,如下所示:

http://railscasts.com/episodes/348-the-rails-api-gem

祝你好运。

关于ruby-on-rails-3 - 从 Rails 设计身份验证到主干和 api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10892506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com