Lors du POST en utilisant axios et devise_token_auth avec Nuxt.js et Ruby on Rails, je suis resté bloqué de manière sobre, je vais donc le résumer avec un mémorandum.
Les paramètres de devise_token_auth sont omis.
L'URL suivante a été utile, il peut donc être bon de la voir.
https://github.com/lynndylanhurley/devise_token_auth https://qiita.com/Masahiro_T/items/6bc49a625b437a7c2f45 https://sainu.hatenablog.jp/entry/2018/08/11/194319
Depuis que nous avons introduit FormObject, nous l'inclurons également.
articles_controller.rb
class ArticlesController < ApplicationController
  def create
    @article = ArticleForm.new(article_params).save
    if @article
      #réduction
    end
  end
  private
  def article_params
    json_request = ActionController::Parameters.new(JSON.parse(request.body.read))
    json_request.permit(
      :title,
      :description,
    ).merge(user_id: current_user.id)
  end
end
articles_form.rb
class ArticleForm
  include ActiveModel::Model
  attr_reader :title, :description
  validates :title, presence: true, length: { maximum: 50 }
  validates :description, length: { maximum: 300 }
  def initialize(article_params)
    @article = article_params
  end
  def save
    return false if valid?
    Article.create(@article)
    true
  end
end
Vous êtes maintenant prêt à POSTER.
J'étais censé jouer avec Json quand il a été POSTé, j'ai donc dû écrire un processus à Parse Json. (J'étais vraiment dedans ici.)
def article_params
  json_request = ActionController::Parameters.new(JSON.parse(request.body.read))
  json_request.permit(
    :title,
    :description,
  ).merge(user_id: current_user.id)
end
Je l'ai posté car il a été enregistré dans l'article suivant (ou plutôt, la partie Parse de Json est copiée).
http://tabunmuri.hatenablog.com/entry/2015/07/02/rails%E3%81%A7json%E3%81%AB%E3%80%81permit%E3%81%A7%E8%A6%81%E7%B4%A0%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%97%E3%81%9F%E3%81%84%E6%99%82%E3%81%AE%E6%96%B9%E6%B3%95
Omettez l'implémentation écrite dans Component et supprimez uniquement l'implémentation de la partie POSTed avec axios qui est faite dans Vuex.
article.js
export const actions = {
  async postArticle({ dispatch }, article) {
    await this.$axios
      .post('/articles', article, {
        headers: {
          'Content-Type': 'multipart/form-data', //Pour l'hypothèse d'envoyer une image samune
          'access-token': this.state.user.userToken.accessToken,
          client: this.state.user.userToken.client,
          uid: this.state.user.userToken.uid,
        },
      })
      .then(() => dispatch('getArticleList'))
      .catch((error) => console.log(error))
  },
}
Le jeton de devise_token_auth est emballé dans un cookie et écrit dans Vuex au moment de nuxtServerInit, afin que le jeton puisse être inséré dans l'en-tête au moment de la demande.
À propos, bien que ce ne soit pas Ruby on Rails, il a une implémentation similaire lors de l'utilisation de GO echo, et le mémorandum est résumé ci-dessous.
https://qiita.com/arthur_foreign/items/fadd784610d764419786
Recommended Posts