我正在测试一些宝石,因为我即将为 iOS 应用程序创建一个 API。这次我使用 Rails-API 和 Devise 进行用户注册。我遵循了从分叉分叉的要点分叉的这个要点,我做了一些更改,用户可以注册和登录,但是,当我before_filter :authenticate_api_user!在控制器上使用时,登录后 current_api_user 为零。根据divise的源代码,我在命名空间内使用 devise_for ,然后一切都发生了变化。这是我的代码。
路线:
Todo::Application.routes.draw do
namespace :api do
devise_for :users
resources :users, only: [:index, :show]
resources :videos, only: [:create]
get "/users/show", to: "users#show"
end
end
应用程序/api/sessions_controller.rb
class Api::SessionsController < ApplicationController
before_filter :authenticate_api_user!, except: [:create]
before_filter :ensure_user_login_param_exists, only: [:create]
# before_filter :ensure_email_param_exists, only: [:create]
# before_filter :ensure_password_param_exists, only: [:create]
respond_to :json
def create
resource = User.find_for_database_authentication(email: params[:user_login][:email])
return invalid_login_attempt unless resource
if resource.valid_password?(params[:user_login][:password])
sign_in(:api_user, resource)
#resource.ensure_authentication_token!
render json: { success: true, email: current_api_user.email }, status: :created
return
end
invalid_login_attempt
end
.
.
.
end
应用程序/api/registrations_controller.rb
class Api::RegistrationsController < ApplicationController
respond_to :json
def create
user = User.new(user_params)
if user.save
render json: user.as_json(email: user.email), status: :created
return
else
warden.custom_failure!
render json: user.errors, status: :unprocessable_entity
end
end
private
def user_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
end
我希望有一个人可以帮助我。顺便说一句,我真的接受任何关于使用 Rails 创建 API 的最佳方式的建议。这是我的第一次。
先感谢您。