1

我正在测试一些宝石,因为我即将为 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 的最佳方式的建议。这是我的第一次。

先感谢您。

4

0 回答 0