LoginSignup
6
6

More than 5 years have passed since last update.

RailsとiOS(Swift)とAWS間をAPIモードで、データファイル保存呼び出しさせるまで①

Last updated at Posted at 2018-09-24

前書き

初心者向けに自分なりの言葉で柔らかく書いたつもりです。非エンジニアですが、メモ目的とアウトプットの恩恵のために記事にしました。間違っているところなどありましたら、コメントをください。
あとコードにコメントが多く可読性が悪いかもしれません。そこは申し訳なく…

iosからAWSまでの一連の流れを記事にしているためかなり長くなっているので、記事を分けて書いています。

③までのものがこちら
https://github.com/ToruMizuno/railswiftapi
④までのものがこちら
https://github.com/ToruMizuno/railswiftapi2

devise token auth編

参考記事

プロジェクト実装

プロジェクト作成

$ rails new railswift --api
$ cd railswift

gem編集

# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'# コメントを外す
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
gem 'rack-cors'# コメントを外す


###############################
# ユーザー認証をするために追加したgem
gem 'omniauth'
gem 'devise'
gem 'devise_token_auth'
###############################

gemをインストールする

$ bundle install

データベース作成

$ rake db:create

devise token auth の認証機能を作成

$ rails g devise_token_auth:install User auth

モデル編集

app/models/user.rb
class User < ActiveRecord::Base
  # Include default devise modules.
  devise :database_authenticatable, :registerable,
          :recoverable, :rememberable, :trackable, :validatable
          # :confirmable, :omniauthable
  include DeviseTokenAuth::Concerns::User
end

devise_token_authで出来たマイグレーションファイルを編集

**************_devise_token_auth_create_users
class DeviseTokenAuthCreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table(:users) do |t|

      # devise_token_authで変わっているところ①
      ## Required
      t.string :provider, :null => false, :default => "email"
      t.string :uid, :null => false, :default => ""

   # devise_token_authで変わっているところ②
      ## Database authenticatable
      t.string :encrypted_password, :null => false, :default => ""
 


      ## deviseでinstallしても出てくるところ
      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at
 
      ## Rememberable
      t.datetime :remember_created_at
 
      ## Trackable
      t.integer  :sign_in_count, :default => 0, :null => false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip
 
 
 
      # コメントにしておく。(お好みで)
      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable
 
      ## Lockable
      # t.integer  :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at
 
 
      # コメントにしておく(お好みで)
      ## User Info
      # t.string :name
      # t.string :nicname
      # t.string :image# carrierwaveでプロフィール画像を保存したい場合は必要、stringで作成
      t.string :email# 必要
      t.string :user_name# 追加
 
      ## Tokens
      t.text :tokens
 
      t.timestamps
    end
 
    add_index :users, :email,                unique: true
    add_index :users, [:uid, :provider],     unique: true# devise_token_authで変わっているところ③
    add_index :users, :reset_password_token, unique: true
 
    # コメントにしておく(お好みで)
    # add_index :users, :confirmation_token,   unique: true
    # add_index :users, :unlock_token,       unique: true
  end
end

テーブル作成

$ rake db:migrate

アカウント作成時の登録項目(パラメータ)の追加

デフォルトのサインアップを継承して、独自で登録できる項目を増やせるようにアクションを作成し、それを実行できるようにルートも追加する

ルートの確認で、

$ rake routes

このパスワードとアドレスだけで認証するデフォルトのルートから

cancel_user_registration GET    /auth/cancel(.:format)         devise_token_auth/registrations#cancel
   new_user_registration GET    /auth/sign_up(.:format)        devise_token_auth/registrations#new
  edit_user_registration GET    /auth/edit(.:format)           devise_token_auth/registrations#edit
       user_registration PATCH  /auth(.:format)                devise_token_auth/registrations#update
                         PUT    /auth(.:format)                devise_token_auth/registrations#update
                         DELETE /auth(.:format)                devise_token_auth/registrations#destroy
                         POST   /auth(.:format)                devise_token_auth/registrations#create
     auth_validate_token GET    /auth/validate_token(.:format) devise_token_auth/token_validations#validate_token

パスワードとアドレス以外も登録できるように新しくする。

cancel_api_user_registration GET    /api/auth/cancel(.:format)         api/auth/registrations#cancel
   new_api_user_registration GET    /api/auth/sign_up(.:format)        api/auth/registrations#new
  edit_api_user_registration GET    /api/auth/edit(.:format)           api/auth/registrations#edit
       api_user_registration PATCH  /api/auth(.:format)                api/auth/registrations#update
                             PUT    /api/auth(.:format)                api/auth/registrations#update
                             DELETE /api/auth(.:format)                api/auth/registrations#destroy
                             POST   /api/auth(.:format)                api/auth/registrations#create
     api_auth_validate_token GET    /api/auth/validate_token(.:format) devise_token_auth/token_validation

コントローラーを作成

$ rails g controller api/auth/registrations

コントローラーの編集

aap/controllers/api/auth/registrations_controller.rb

# 追加
module Api
  module Auth
    class RegistrationsController < DeviseTokenAuth::RegistrationsController

      private
      # nicnameやaddressなど新しく項目(パラメーター)を付け足せる(マイグレーションでカラムを付け足さないと使えない)
      # DeviseTokenAuthでアカウント作成の際、必要となるパラメーターをここに定義
      def sign_up_params
        params.permit(:user_name, :email, :password, :password_confirmation)
      end

      # def create
      #   build_resource(sign_up_params)
      #   resource.skip_confirmation!
      # end

      # DeviseTokenAuthでアカウント情報の中でupdateできるものを定義
      def account_update_params
        params.permit(:user_name, :email)
      end
    end
  end
end

上記のコントローラーアクションのルートの追加

config/routes.rb
Rails.application.routes.draw do

  # コメントにする
  # mount_devise_token_auth_for 'User', at: 'auth'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html

  # 追加
  namespace :api do
    mount_devise_token_auth_for 'User', at: 'auth', controllers: {
        registrations: 'api/auth/registrations'
    }
  end

end

その他の設定

initializeの設定

config/initializers/dvise_token_auth.rb
DeviseTokenAuth.setup do |config|

  config.change_headers_on_each_request = false# tokenの使い回し出来るようにする
  config.token_lifespan = 1.month# tokenの有効期限、短いとセキュリティーが良い

  config.headers_names = {:'access-token' => 'access-token',
                          :'client' => 'client',
                          :'expiry' => 'expiry',
                          :'uid' => 'uid',
                          :'token-type' => 'token-type' }
end

Alamofire、Swiftyjson編

記事の初めにも記述しましたが、iosからAWSまでの一連の流れを記事にしているためかなり長くなってしまったので他の記事でも紹介しています。
こちらを続けてご覧下さい。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6