2016-09-17 9 views
1

Rails APIを使ってjsonファイルを投稿しようとしています。 私が修正しようとしましたが、この私の問題 を実行することはできません。CSRFトークンの信頼性を確認できません! POSTのRAILS API

Severのログ:

Started POST "/students/" for 127.0.0.1 at 2016-09-17 17:45:33 +0700 
    ActiveRecord::SchemaMigration Load (0.0ms) SELECT "schema_migrations".* FROM "schema_migrations" 
Processing by Devise::RegistrationsController#create as */* 
    Parameters: {"student"=>{"name"=>"Duong", "score"=>"10"}, "registration"=>{"student"=>{"name"=>"Duong", "score"=>"10"}}} 
Can't verify CSRF token authenticity. 
Unpermitted parameters: name, score 
    (0.0ms) begin transaction 
    (0.0ms) rollback transaction 
    Rendering C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/devise-4.2.0/app/views/devise/registrations/new.html.erb within layouts/application 
    Rendered C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/devise-4.2.0/app/views/devise/shared/_links.html.erb (10.0ms) 
    Rendered C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/devise-4.2.0/app/views/devise/registrations/new.html.erb within layouts/application (60.0ms) 
Completed 500 Internal Server Error in 442ms (ActiveRecord: 0.0ms) 

Student.rb

これは私の学生モデル

class Student < ApplicationRecord 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

Application_controllerです

私は問題を解決しました=> null_se ssion

class ApplicationController < ActionController::Base 

    protect_from_forgery with: :null_session 

end 

Student_controller

class Api::StudentsController < ApplicationController 
    def index 
    students = Student.all 
    render json: students, status: 200 
    end 
    def show 
    response_with Student.find(params[:id]) 
    end 
    def create 
    student = Student.new(student_params) 
    #if you save successfully than response with json data and status code 201 
    if student.save 
     render json: user, status: 201, location: student 
    else 
     render json: {error: user.errors}, status: 422 
    end 
    end 
    private 
    def student_params 
    params.require(:student).permit(:name, :score) 
    end 
end 

router.rb

Rails.application.routes.draw do 
    devise_for :students 
    namespace :api, path: '/',constraints: {subdomain: 'api'} do 
    resources :students, only: [:index, :show, :create] 
    end 
end 

しかし、私は

{"student": {"name": "Duong", "score": "10"}} 

持たをapi.1312100.com/students/するポストを送りますエラー:

500 internal server error 
+0

を持っていますかあなたのには、<%= csrf_meta_tags%>? – luissimo

+0

どこにある? –

+0

CSRFエラーについてはあまり言えません。 'Unpermitted parameters:name、score'エラーを修正する必要があります。これらのパラメータをホワイトリストに入れてみてください。 – Sajan

答えて

1

:あなたはを

skip_before_action :verify_authenticity_token 
+0

たくさんありますが、まだ許可されていません: 'Unmitted parameters:name、score' –

+0

あなたはapiのためにPostメソッドを使って' students/'を呼び出します。 '/ api/students /' 'ポストメソッドを使用 – Tejas

+0

非常に多くの! –

1

カーリング:Api::StudentsControllerアドオンで

curl -i -H "Accept: application/json" -H "Content-type:application/json" -X POST -d '{"student": {"name": "Duong", "score": "10"}}' http://api.1312100.com/students/ 

アプリケーションコントローラ

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception, if: Proc.new { |c| c.request.format != 'application/json' } 
    protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' } 
end 
関連する問題