Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

posted at

updated at

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

はじめに

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

おわりに

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?