1
/
5

【note更新しました!】「Laravel + Vue.jsではじめる 実践 GraphQL入門」の全貌を大公開します!〜GraphQL + Laravelでバックエンドを開発!(ログイン機能・ツイート機能)編〜

こんにちは!FISM採用広報担当です!

今週も始まりました。
企画開発メンバーによる特別連載「Engineering of FISM」の時間です。


▼毎週木曜日に更新中です🎉

Engineering of FISM
FISMのテックな話をしよう
https://www.wantedly.com/feed/s/fism_engineering


先週に引き続き今週も、企画開発メンバーで執筆しましたLaravel + Vue.jsではじめる 実践 GraphQL入門の全貌を大公開します!

今回は、note第4弾!
「GraphQL + Laravelでバックエンドを開発!(ログイン機能・ツイート機能)編」です。

せっかくですので、ほんの少しだけ中身を公開致します。
本当に、少しだけですよ。それでは、どうぞご覧くださいませ!


ログイン機能

作成済みのアカウント情報を使ってログインする機能を実装します。


ログイン用のMutation(ミューテーション)の作成

ログインで使用するミューテーションを作成します。

$ touch graphql/Mutations/Login.graphql


上記のコマンドを実行してファイルを作成し、次の内容を設定してください。

extend type Mutation { # ①
    Login( # ②
        email: String @rules(apply: ["required", "email"])
        password: String @rules(apply: ["required", "max:16"])
    ): Token @field(resolver: "LoginResolver@resolve") # ③
}


2つ目以降のMutationを定義する際には extend を設定します(①)。
ログインにはメールアドレスとパスワードを使用します。(②)
Loginミューテーションはリゾルバーとして LoginResolver を使用し、 Token タイプを返却します(③)。



ログインリゾルバーの作成

それではartisanコマンドを使って LoginResolver を生成しましょう。

$ php artisan lighthouse:mutation LoginResolver


ログインリゾルバーの実装は下記の通りです。

<?php

namespace App\GraphQL\Mutations;

use Carbon\Carbon;
use GraphQL\Type\Definition\ResolveInfo;
use Illuminate\Auth\AuthManager;
use Nuwave\Lighthouse\Support\Contracts\GraphQLContext;

class LoginResolver
{

    /**
     * Return a value for the field.
     *
     * @param null $rootValue Usually contains the result returned from the parent field. In this case, it is always `null`.
     * @param array $args The arguments that were passed into the field.
     * @param GraphQLContext|null $context Arbitrary data that is shared between all fie lds of a single query.
     * @param ResolveInfo $resolveInfo Information about the query itself, such as the e xecution state, the field name, path to the field from the root, and more.
     *
     * @return mixed
     */
     public function resolve($rootValue, array $args, GraphQLContext $context, ResolveInf o $resolveInfo)
     {
         $authManager = app(AuthManager::class);

         /** @var \Tymon\JWTAuth\JWTGuard $guard */
         $guard = $authManager->guard('api');
         $token = $guard->attempt([
             'email' => $args['email'],
             'password' => $args['password'],
         ]);

         if ($token) {
             /** @var \App\Models\Account $account */
             $account = auth()->user();
             $account->logged_in_at = Carbon::now();
             $account->save();
         }

         return [
             'access_token' => $token,
             'token_type' => 'bearer',
             'expires_in' => $guard->factory()->getTTL() * 60,
         ];
     }
} 



作成したアカウントでログインする

ログイン処理が用意できたので、Playgroundを使って動作を確認します。
リクエストを入力して実行してみま・・・






















「ちょっとこれ以上お見せするのは厳しいですね」



ちょっと厳しいみたいですので、続きは大橋noteにて大公開しております。


そんな第4弾はこちら🎉

「Laravel + Vue.jsではじめる 実践 GraphQL入門」の全貌を大公開します!〜GraphQL + Laravelでバックエンドを開発!(ログイン機能・ツイート機能)編〜|kzkohashi|note
こんにちは。 です。FISM という会社でCTOをやっております。 今年4月に 「Laravel + Vue.jsではじめる 実践 GraphQL入門」 という技術書籍を出版しました。​ 前々回から実践編について引き続き書いています。今回は第4弾! GraphQL + Laravelでバックエンドを開発!(ログイン機能・ツイート機能)編です。 ※今回もコードがメインになります。どうぞ!! 作成済みのアカウント情報を使ってログインする機能を実装します。 $ touch graphql/Mutations/
https://note.mu/kzkohashi/n/n55d53aa47152




来週も木曜日に更新いたします!乞うご期待ください!


現在FISMでは、絶賛開発メンバーを募集しています。
GraphQL × Laravel + Vue.js + Swift で開発できるのはFISMだけ!
エントリーお待ちしています!

まずはカジュアルにお話ししましょう!

FISM株式会社's job postings
14 Likes
14 Likes

Weekly ranking

Show other rankings
Invitation from FISM株式会社
If this story triggered your interest, have a chat with the team?