Tro*_*nic 4 devise backbone.js ruby-on-rails-3
我想重建一个应用程序,这是一个典型的rails 3.2 mvc应用程序只进入API +前端(Backbone).因为我没有在rails中构建API的经验,包括authenticatin:
提前致谢!
Seb*_*ien 10
我可以解释你这样做的方式:
首先,我用设计安装标准的rails应用程序.之后,我创建自己的会话控制器:
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
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我发送一个请求到这个URL与json看起来像:
{
user => {
email => "myemail@toto.com",
password => "monpass"
}
}
Run Code Online (Sandbox Code Playgroud)
如果每件事情都很好或者是错误,我的控制器会将json与用户数据一起返回给我.在json with user上,我返回一个用于下一次请求的access_token,以检查是否允许用户请求.我在应用程序控制器中制作了这个过滤器
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
Run Code Online (Sandbox Code Playgroud)
如您所见,在每个下一个请求中,我将在密钥上的html标头中添加access_token:HTTP_USER_ACCESS_TOKEN
所以,我可以检查是否允许用户发出请求.
要创建API,您可以使用Rails API gem,如下所示:
http://railscasts.com/episodes/348-the-rails-api-gem
祝好运.
| 归档时间: |
|
| 查看次数: |
1950 次 |
| 最近记录: |