0

サーバーにjsonでログインしたい。create メソッドはカスタム ビュー (new.html.erb) では機能しますが、json では機能しません。私はgemデバイスを使用しています。

セッションコントローラー:

class SessionsController < ApplicationController

  respond_to :json

  def new
    #empty because no underlying model
  end


  def create
    user = User.find_by_email(params[:email])

    respond_to do |format|
      if user && user.authenticate(params[:password]) #because user has_secure_password
        session[:user_id] = user.id

        format.html { redirect_to images_path, notice: "Login successful!" }
        format.json { render :json => {:success => true,
                      :info => "Logged in" } }
      else
        format.html { flash.now.alert = "Wrong email or password"
                    render "new" }
        format.json { render :json => {:success => false, :info => "Wrong email or password" } }
      end
    end
  end



  def destroy

    session[:user_id] = nil
    respond_to do |format|
      format.html { redirect_to bookmarks_path, notice: "Logout successful!" }
      format.json { render :json => {:success => true,
                      :info => "Logged out",
                      :data => { } } }
    end

  end


end

user.rb

    class User < ActiveRecord::Base

      attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :encrypted_password

      has_secure_password

      validates :email, format: /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, uniqueness: true

end

ルート.rb:

#user
  resources :users , only: [:new, :create]

  #session
  get "login" => "sessions#new", as: "login"
  post "sessions" => "sessions#create", as: "sessions"
  delete "logout" => "sessions#destroy", as: "logout"

レーキルート:

users POST   /users(.:format)           users#create
  new_user GET    /users/new(.:format)       users#new
     login GET    /login(.:format)           sessions#new
  sessions POST   /sessions(.:format)        sessions#create
    logout DELETE /logout(.:format)          sessions#destroy

Chrome 拡張機能の Simple REST Client を使用して、HTTP POST 経由でサーバーをテストし、json データを使用します (ユーザーは既にデータベースに存在し、new.html.erb ビューからのログインが機能します)。

url:           http://localhost:3000/sessions
method:        POST
Content-Type:  application/json
               Accept: application/json
Data:          {"user":{ "email":"test@test.at","password":"asdf" }}

応答として、ステータス 200 OK を取得しますが、次のようになります。

{"success":false,"info":"Wrong email or password"}

メールとパスワードは正しいですが。

4

1 に答える 1

1

json オブジェクトのルートに電子メールとパスワードを入力するか、params[:user][:email].

于 2013-06-23T15:58:32.137 に答える