前提・実現したいこと
Ruby on railsとvue.jsを使用してSPAアプリを制作しています。
rails側でdevise-token-authを使用しログイン機能を実装しています。
必要なheadersは以下のように渡しているはずなんですが、なぜかログインしていることになりません。
一つ気になる点としまして、headersには認証に必要な3つ以外は記入していないのですが、なぜか"user_skill"という空の配列が渡されています
問題点、ご教授お願いいたします。
該当のソースコード
routes
1 POST /api/skills/:skill_id/user_skills(.:format) api/user_skills#create
usersilllscontroller
1def create 2 skill = Skill.find(params[:skill_id]) 3 user_skill = current_api_user.user_skills.new(skill: skill, user: current_api_user) 4 if user_skill.save 5 render json: user_skill, status: :created 6 else 7 render json: user_skill.errors, status: :bad_request 8 end 9 end
vue
1 2 3addTargetSkill(e) { 4 axios.post(`http://localhost:3000/api/skills/${e}/user_skills`, { 5 headers: { 6 uid: localStorage.getItem("uid"), 7 "access-token": localStorage.getItem("access-token"), 8 client: localStorage.getItem("client"), 9 } 10 }) 11 }, 12
発生している問題・エラーメッセージ
ステータスコード500とメッセージが返ってきます
undefined method `user_skills' for nil:NilClass user_skill = current_api_user.user_skills.new(skill: skill, user: current_api_user) parametes {"headers"=>{"uid"=>"mochi@mochi.com", "access-token"=>"0CLH7UFQX-vdZ1gISwa7sg", "client"=>"ZhgcdJskhbOENZwAS1Tn3A"}, "skill_id"=>"30", "user_skill"=>{}}
試したこと
外部ツールpostmanを使用して同じリクエストを投げたところ成功しました。
なぜかはわかりません。。。
テストも書いているのですが、テストは成功します。。。
Rspec
1RSpec.describe "Api::UserSkills", type: :request do 2 let(:user) { create(:user) } 3 let(:skill) { create(:skill)} 4 let(:us) { create(:user_skill)} 5 let(:uid) { response.headers["uid"] } 6 let(:client) { response.headers["client"] } 7 let(:access_token) { response.headers["access-token"]} 8 before do 9 post "/api/user/sign_in", params: { email: user.email, password: user.password } 10 end 11 12 describe "POST /create" do 13 it "ログインすれば登録できる" do 14 post "/api/skills/#{skill.id}/user_skills", headers: {uid: uid, client: client, "access-token": access_token} 15 expect(user.skills.count).to eq(1) 16 end 17 end 18
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/11 12:16 編集
2021/06/11 12:18
2021/06/11 12:21
2021/06/11 13:24
2021/06/11 13:52