前提
mautic、railsってそもそも何なの?って説明は省きます。
この記事を書いたきっかけ
RailsのサイトにMauticを導入する方法
公式、先駆者の記事を見て構築すればmauticとrailsをすんなり連携できるのですが
認証周りでハマってしまいかなり時間を無駄にしてしまったためメモとして残します。
スクリプト作成
rails側のUserとmauticのcontactでemailが一致するデータに対して名前を更新するスクリプトを作成
rails→mautic連携するスクリプト
task_name.rb
namespace :task_name do
desc "実行処理の説明"
task :create, ['name'] => :environment do |task, args|
conn = Mautic::Connection.last
# emailが一致しているデータをMauticへ連携する(実際の業務ではDBから取得した値を使うでしょう)
contact = conn.contacts.where(search: "email: dummy@dummy.co.jp").first
# ユーザ情報を格納する
contact.firstname = "ほげ"
contact.lastname = "ほげお"
# ユーザ情報をMauticに保存する
if contact.save then
Rails.logger.info('success')
else
Rails.logger.error("error: #{contact.errors}")
end
end
end
実行してみた
なんかエラー出た・・・
$ rake task_name:create
rake aborted!
A refresh_token is not available
/Users/hoge/projects/rails/lib/tasks/task_name.rake:14:in `block (2 levels) in <main>'
Tasks: TOP => task_name:create
(See full trace by running task with --trace)
A refresh_token is not available
リフレッシュトークンが設定されてませんですよと
何か手順抜けたのか・・・
うーん、とりあえずgemの中身みたり、公式のドキュメント読んでみるしかないか
色々調べてみた
mauticのgemやOauth2のgemのソースを読んでみたが
公式のPHPのアプリケーションでのHow toを読んで何が足りてないのか理解できた
→How to Use the Mautic Rest API
かなりざっくり言うと先にtokenを発行しておいてとのこと
解決方法
http://localhost:3000/mautic/connections/1/authorize
にアクセス
rails側のmautic_connectionsが更新され、token
とrefresh_token
が発行できた
(0.1ms) begin transaction
↳ /Users/hoge/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/log_subscriber.rb:98
Mautic::Connections::Oauth2 Update (0.4ms) UPDATE "mautic_connections" SET "token" = ?, "refresh_token" = ?, "updated_at" = ? WHERE "mautic_connections"."id" = ? [["token", "hoge_token"], ["refresh_token", "hoge_refresh_token"], ["updated_at", "2018-07-07 16:23:32.467550"], ["id", 1]]
↳ /Users/hoge/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/log_subscriber.rb:98
(3.0ms) commit transaction