- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想为移动应用程序使用的 RoR 中的服务器做 REST API。
我的项目主要基于
并且因为在最新版本的DEVISE gem中没有token认证,所以我也是这样使用的:
https://gist.github.com/josevalim/fb706b1e933ef01e4fb6
我的问题现在出现了 - 当我使用 cURL 测试 API 时,POST(登录)是正确的,但 DELETE(注销)不起作用。我在终端中输入: p>
curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X DELETE http://localhost:3000/api/v1/sessions/\?auth_token\=CvX8WZr2MjVhWYxxEXYy
或
curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X DELETE http://localhost:3000/api/v1/sessions -d "{\"auth_token\":\"CvX8WZr2MjVhWYxxEXYy\"}"
(当然是我的特定 token )我得到了答案:
{"error":"You need to sign in or sign up before continuing."} with HTTP/1.1 401 Unauthorized
另外服务器日志:
Started DELETE "/api/v1/sessions" for 127.0.0.1 at 2014-06-07 03:11:17 +0200
Processing by Api::V1::SessionsController#destroy as JSON
Parameters: {"auth_token"=>"CvX8WZr2MjVhWYxxEXYy", "session"=>{"auth_token"=>"CvX8WZr2MjVhWYxxEXYy"}}
Completed 401 Unauthorized in 1ms
我的关键文件代码:
application_controller.rb
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_filter :authenticate_user_from_token!
before_filter :authenticate_user!
private
def authenticate_user_from_token!
user_email = params[:user_email].presence
user = user_email && User.find_by_email(user_email)
if user && Devise.secure_compare(user.authentication_token, params[:user_token])
sign_in user, store: false
end
end
end
sessions_controller.rb
class Api::V1::SessionsController < Devise::SessionsController
skip_before_filter :verify_authenticity_token,
:if => Proc.new { |c| c.request.format == 'application/json' }
respond_to :json
def create
warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
render :status => 200,
:json => { :success => true,
:info => "Logged in",
:data => { :auth_token => current_user.authentication_token } }
end
def destroy
warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
current_user.update_column(:authentication_token, nil)
render :status => 200,
:json => { :success => true,
:info => "Logged out",
:data => {} }
end
def failure
render :status => 401,
:json => { :success => false,
:info => "Login Failed",
:data => {} }
end
end
用户.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:confirmable
attr_accessible :name, :email, :password, :password_confirmation, :remember_me
before_save :ensure_authentication_token
def ensure_authentication_token
if authentication_token.blank?
self.authentication_token = generate_authentication_token
end
end
def skip_confirmation!
self.confirmed_at = Time.now
end
private
def generate_authentication_token
loop do
token = Devise.friendly_token
break token unless User.where(authentication_token: token).first
end
end
end
routes.rb
Ihome::Application.routes.draw do
get "welcome/index"
devise_for :users
root 'welcome#index'
namespace :api do
namespace :v1 do
devise_scope :user do
post 'sessions' => 'sessions#create', :as => 'login'
delete 'sessions' => 'sessions#destroy', :as => 'logout'
end
end
end
end
哪里不对,因为我分析了整个程序,找不到错误的原因?
最佳答案
我在 SimpleTokenAuthentication 的 GitHub 问题中引用了这个问题,这是一个实现 token 身份验证模式的 gem。参见 https://github.com/gonzalo-bulnes/simple_token_authentication有关 gem 的更多信息。
我最初认为您的问题与我遇到的问题相同,因为我也仅在注销操作时收到 401。但是,@gonzalo-bulnes 似乎发现了您的问题。
参见 https://github.com/gonzalo-bulnes/simple_token_authentication/issues/76#issuecomment-46836215
...isn't ukson forgetting to provide the user_email param? Token authentication can't be performed with the only auth_token. (In fact, the point of the José Valim's gist is to explain how to perform that e-mail cross-checking when implementing token authentication.)
根据我自己对您的代码的审查,他似乎是对的。尝试添加此参数,看看是否有帮助!
关于ruby-on-rails - ruby rails : cURL DELETE token authentication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24092791/
我在服务器端实现了 oauth token ,但在无效 token 或 token 过期时,我收到 200 http 状态代码,但在响应正文中我有{"code":"4XX", "data":{"som
我正在尝试将 sinatra-authentication gem 添加到 Sinatra 应用程序中,虽然它在那里并完成了它的一部分工作,但由于某种原因,路由似乎没有被添加。代码基础: requir
我有一个健身移动应用程序的想法,我一直在为 iPhone(基于 Obj-C)、Android(基于 Java)、WebOS(基于 html5)和诺基亚 Qt 开发基于这个想法的应用程序。 我现在需要向
我见过有人使用 UUID 生成身份验证 token 。然而,在 RFC 4122据说 Do not assume that UUIDs are hard to guess; they should n
上下文如下。 pouchdb-authentication API没有为此提供明确的方法。我考虑过使用db.getUser(username [, opts][, callback]) 。然而,该方法
Edge 浏览器中的“基本身份验证”没有保存密码的选项。当浏览器关闭并重新打开时,用户必须重新输入密码。 有没有人解决这个问题? 最佳答案 它仍然存在并且仍在工作,他们只是从那些对话框窗口中删除了复选
嗨,我需要知道如何在 iPhone 上使用 oAuth for twitter 自动登录帐户。该应用程序应登录并向用户显示该帐户的提要。 最佳答案 OAuthentication 需要几个阶段,您可以
Edge 浏览器中的“基本身份验证”没有保存密码的选项。当浏览器关闭并重新打开时,用户必须重新输入密码。 有没有人解决这个问题? 最佳答案 它仍然存在并且仍在工作,他们只是从那些对话框窗口中删除了复选
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
在尝试运行一些 OpenVAS CLI 命令时,我收到 Failed Authentication 错误消息。 OpenVAS 安装在 CentOS 机器上。我尝试使用用户帐户凭据,但仍然收到相同的错
我正在设计一个 web api。我需要让用户对自己进行身份验证。我有点犹豫让用户以明文形式传递他们的用户名/密码.. 类似于:api.mysite.com/auth.php?user=x&pass=y
我尝试通过 oAuth 在 Spring Security 应用程序中验证用户。我已经收到 token 和用户数据。 如何在没有密码和经典登录表单的情况下手动验证用户? 谢谢你。 最佳答案 像这样的东
我正在 Symfony 4 中创建一个简单的登录身份验证系统并使用安全组件 Guard。我的 FormLoginAuthenticator 如下: router = $router;
我正在开发一个具有多个角色的网络应用程序。我想到了一种方法,可以使用 React Router 通过 onEnter 触发器来限制对某些路由的访问。 现在我想知道这是否是防止访问未经授权的页面的可靠方
我已通读 RFC 2617如果支持多种方案,则无法在那里或其他任何地方找到分隔符。例如,假设支持 Basic 和 Digest。我知道它可能会以这种方式出现: HTTP/1.1 401 Unautho
我在 OWIN Cookie 身份验证方面遇到了一些问题。我有一个 .Net 站点,它有一些 MVC 页面,这些页面使用 cookie 身份验证和受不记名 token 保护的 WebAPI 资源。 当
我正在使用 Telnet 向 Mikrotik 路由器发送命令。 telnet 192.168.100.100 -l admin Password: pass1234 [admin@ZYMMA] >
我管理着一个庞大而活跃的论坛,但我们正被一个非常严重的问题所困扰。我们允许用户嵌入远程图像,就像 stackoverflow 处理图像 (imgur) 的方式一样,但是我们没有一组特定的主机,可以使用
这个真的让我抓狂。 我在 JBoss AS 中有一个 Guvnor(稍后会详细介绍)。我编辑了 components.xml 以启用身份验证(使用 JAAS,我已经很好地设置了用户和密码)和基于角色的
我们有一个管理站点,需要身份验证才能访问。站点上的页面包裹在 Coldfusion 自定义标签中,其中包括所有样式和 JS,以及一些其他信息。 我最近制作了一份自定义标签包装器的副本。我将副本放在与原
我是一名优秀的程序员,十分优秀!