LoginSignup
2
0

More than 3 years have passed since last update.

【Rails】ログイン結果をJSON形式で返す(初学者用)

Last updated at Posted at 2020-12-20

はじめに

API通信って最初何やってるのかよくわかりませんでした。
今回は、同じ悩みを持つ人が少しでもイメージが持てるように、
UIはつくらずに、実行後のレスポンス結果をJSONで返す実装を紹介します。
題材はRails初学者が恐らく最初に学んだであろうサインアップ、ログイン。

コード

※ userテーブルのカラムはemail,password
※ アクセスURLはhttp://localhost:3000/api/v1/*** とします。localhost:3000のままでもok

routes.rb
Rails.application.routes.draw do
  # namespaceで /api/v1/の階層をつくる
  namespace :api, format: :json do
    namespace :v1 do
      post :sign_up,  to: 'users#sign_up'
      post :login,   to: 'users#login'
    end
  end
end
users_controller.rb
class Api::V1::UsersController < ApplicationController ## クラス名を階層に合わせる
  def sign_up
    user = User.new(user_params)
    if user.save
      render status: "200", json: { result: user }  # 保存成功時にユーザー情報をjson形式で返す
    else
      render status: "400", json: { result: "メールアドレスまたはパスワードが有効ではありません" }
    end
  end

  def login
    user = User.find_by(email: params[:email])
    if user && user.authenticate(params[:password])
      render status: "200", json: { result: user }  # ログイン成功時にユーザー情報をjson形式で返す
    else
      render status: "400", json: { result: "メールアドレスまたはパスワードが一致しません" }
    end
  end

  private

    def user_params
      params.permit(:email, :password)
    end
end

Postmanで試してみる

使ったことない人のために

インストール(https://www.postman.com/) したら画像の通りやってみてください。
設定できたら「Send」ボタンで実行!
スクリーンショット 2020-12-20 21.45.33.png
スクリーンショット 2020-12-20 21.47.01.png

サインアップ成功例

スクリーンショット 2020-12-20 21.34.48.png

ログイン成功例

スクリーンショット 2020-12-20 21.35.49.png

ログイン失敗例

スクリーンショット 2020-12-20 21.36.25.png

レスポンス内容を全部表示したくないとき

as_jsonを使うと簡単に制限できます。
参考URL https://qiita.com/tbaba/items/ea44025b056f708ab0b4

おわりに

知ってしまえば意外と簡単でした。でも初学者はこれを知るのに時間がかかるんです。。。
誰かの助けになれば幸いです。

2
0
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
2
0