gpt4 book ai didi

ruby-on-rails - 使用 Rails 和 Devise 进行 token 身份验证

转载 作者:行者123 更新时间:2023-12-01 16:52:02 25 4
gpt4 key购买 nike

我正在按照这篇优秀的文章来设置我的 Rails (3.2) API 的身份验证部分:
http://blog.joshsoftware.com/2011/12/23/designing-rails-api-using-rabl-and-devise/

我已完成以下步骤:

-向 Gemfile 添加了设计

-为用户模型启用设备并运行所需的迁移

-我的用户模型是

class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
devise :token_authenticatable

attr_accessible :email, :authentication_token, :password, :password_confirmation, :remember_me
end

以及数据库中的 token_authenticable(通过迁移)。

-将 RegistrationController 子类化为:

class RegistrationsController < Devise::RegistrationsController
def new
super
end

def create
resource = warden.authenticate!(:scope => resource_name, :recall => " {controller_path}#new")
sign_in(resource_name, resource)
current_user.reset_authentication_token!
respond_with resource, :location => after_sign_in_path_for(resource)
end

def update
super
end
end

-在routes.rb中,我有:

devise_for :users, :controllers => {:registrations => "registrations"}

用户创建

我想要以下请求来创建用户并发回 authentification_token:

curl -H "Accept: application/json" -H "Content-type: application/json"  -X POST -d '{"user":{"email":"email@gmail.com", "password":"pass"}}' 'http://localhost:3000/users.json

我的理解是逻辑应该进入注册 Controller 的“create”方法(应该创建用户并同时登录)。我认为我应该是错的,因为我得到的返回信息是:

{"error":"You need to sign in or sign up before continuing."}

创建和记录新用户缺少什么? POST 到 users.json 不是映射到 RegistrationController#create 吗?

用户登录

此外,我希望通过以下请求来登录用户(检查登录/密码后将其发送回他的 authentification_token)

curl -H "Accept: application/json" -H "Content-type: application/json"  -X GET -d '{"user":{"email":"email@gmail.com","password":"pass"}}' 'http://localhost:3000/users.json

我猜逻辑应该放在 RegistrationController 的“update”方法中,但不能 100% 确定。登录完成后,我将添加 token 身份验证以保护其他一些模型的创建/ View 。

更新

当我发布时:

curl -H "Accept: application/json" -H "Content-type: application/json"  -X POST -d '{"user":{"email":"email@gmail.com", "password": "mypass", "phone":"1234567890"}}' 'http://localhost:3000/users.json'

我收到以下消息:

Started POST "/users.json" for 127.0.0.1 at 2012-03-11 20:50:05 +0100
Processing by RegistrationsController#create as JSON
Parameters: {"user"=>{"email"=>"email@gmail.com", , "password"=>"[FILTERED]", "phone"=>"1234567890"}, "registration"=>{"user"=>{"email"=>"email@gmail.com", "password"=>"[FILTERED]", "phone"=>"1234567890"}, "action"=>"create", "controller"=>"registrations", "format"=>"json"}}
WARNING: Can't verify CSRF token authenticity
Completed 401 Unauthorized in 1ms

有什么想法为什么用户没有创建和登录以及为什么没有返回authentication_token吗?

最佳答案

这是我的错,我会更新博客文章。您需要添加以下代码以在注册 Controller 中创建用户

if params[:api_key].blank? or params[:api_key] != API_KEY
render :json => {'errors'=>{'api_key' => 'Invalid'}}.to_json, :status => 401
return
end
build_resource
if resource.save
sign_in(resource)
resource.reset_authentication_token!
#rabl template with authentication token
render :template => '/devise/registrations/signed_up'
else
render :template => '/devise/registrations/new' #rabl template with errors
end

如果您遇到任何问题,请告诉我?

关于ruby-on-rails - 使用 Rails 和 Devise 进行 token 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9641079/

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