Laravel Socialite - GitHub를 사용하여 로그인(Laravel 8.0)

13625 단어

라라빌


Laravel은 무료 개원 PHP 소프트웨어 프레임워크로 Taylor Otwell에서 개발한 것으로 구조 템플릿 모델인 보기-컨트롤러(MVC)와 Symfony를 바탕으로 웹 응용 프로그램을 구축하는 데 목적을 둔다.Laravel의 일부 기능은 관계 관리자에 의존하는 모듈화된 패키지 프레임워크, 관계 데이터베이스에 접근하는 다양한 방식, 응용 프로그램의 배치와 유지보수에 도움이 되는 실용 프로그램을 포함한다.
Laravel에 대한 추가 정보
소셜 로그인은 페이스북, 트위터, Github 또는 Google과 같은 소셜 네트워크 서비스의 기존 정보를 사용하여 단일 로그인하는 형식으로 제3자 응용 프로그램에 로그인하는 것이지 이 응용 프로그램에 대한 새로운 계정을 만드는 것이 아니다.
페이스북, 트위터, 구글, 링크드 인, GitHub, GitLab, Bitbucket을 통해 Laravel Socialite는 OAuth 인증에 직관적이고 유창한 인터페이스를 제공한다.샘플 파일에 쓰기 싫은 거의 모든 소셜 인증 코드를 처리할 수 있어 사용자가 클릭만 하면 프로그램에 쉽게 등록하거나 로그인할 수 있다.
본고에서 Laravel 프레임워크를 사용하여 GitHub를 사용하여 소셜 등록을 만드는 방법을 보여 드리겠습니다.

요구 사항


이 강좌를 계속하기 전에 PHP와 Laravel 프레임워크에 익숙하다고 가정하십시오.만약 당신이 익숙하지 않거나 이전에 라벨 프레임워크를 사용한 적이 없다면, 라벨의 기초 지식을 배워서 적어도 라벨 프레임워크로 응용 프로그램을 개발할 수 있기를 권장합니다.

시작합시다!


1단계


Laravel 프로젝트 만들기


우선 Laravel 프로젝트를 만듭니다.
터미널을 열고 항목을 만들 폴더로 이동하여 다음 명령을 실행합니다.
composer create-project --prefer-dist laravel/laravel socialite
cd socialite을 실행하여 새로 만든 프로젝트로 탐색하기

2단계


설치 프로그램


선택한 code editor을 사용하여 항목을 엽니다.Visual Studio 코드를 사용합니다..env file 구성 및 데이터베이스 연결
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-socialite
DB_USERNAME=root
DB_PASSWORD=
터미널을 열고 다음 동작을 실행합니다
composer require laravel/ui
php artisan ui vue --auth
npm install && npm run dev
그럼 지금까지 우리가 뭘 했는지 봅시다.
php artisan serve
만약 당신이 상술한 기능을 성공적으로 실행했다면, 당신은 반드시 이런 기능을 가지고 있어야 합니다.

코드 편집기로 돌아가서 로그인을 엽니다.칼날php 파일, 다음 내용으로 교체
@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Login') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('login') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>

                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">

                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <div class="col-md-6 offset-md-4">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>

                                    <label class="form-check-label" for="remember">
                                        {{ __('Remember Me') }}
                                    </label>
                                </div>
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-8 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Login') }}
                                </button>

                                @if (Route::has('password.request'))
                                    <a class="btn btn-link" href="{{ route('password.request') }}">
                                        {{ __('Forgot Your Password?') }}
                                    </a>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row mb-0 mt-3">
                            <div class="col-md-8 offset-md-4">
                                <a href="{{ url('/login/github') }}" class="btn btn-warning">
                                    {{ __('Login with Github') }}
                                </a>
                            </div>
                        </div>


                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection


login.blade.php을 교체하면 유사한 내용을 볼 수 있습니다.

단계 3


소셜 네이티브 설치 및 구성


Laravel socialite를 설치하도록 하겠습니다.
Laravel 프로젝트의 루트 디렉터리에서 다음 명령을 실행하고 패키지를 프로젝트의 종속 항목에 추가합니다.
composer require laravel/socialite
설치가 완료되면 config / app.php에 서비스 공급업체를 등록해야 합니다.
공급자 그룹에서 총 config/app.php개 추가
Laravel\Socialite\SocialiteServiceProvider::class,
같은 파일의 별칭 그룹에 추가
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
당신의 Laravel 소프트웨어에서 사교 명원은 이미 모두 설정되어 있으며, 당신은 이미 사교 로그인을 도입할 준비가 되어 있습니다.config/services.php에 다음 내용 추가
'github' => [
        'client_id' => env('GITHUB_ID'),
        'client_secret' => env('GITHUB_SECRET'),
        'redirect' => env('GITHUB_URL'),
    ],

.env에 다음 내용 추가

GITHUB_ID=
GITHUB_SECRET=
GITHUB_URL=http://127.0.0.1:8000/github/callback

https://github.com/settings/developers으로 넘어가서 새로운 응용 프로그램을 만듭니다.우리는 이 페이지에 응용 프로그램 이름, 설명, 사이트 이름, 리셋 URL을 놓았습니다.
대시보드가 표시됩니다.이제 다음 클라이언트 ID와 클라이언트 기밀을 가져옵니다.
응용 프로그램 ID와 응용 프로그램 기밀 내용을 각각 대시보드 설정에서 GITHUB ID와 GITHUB Secret으로 복사합니다.app/User.php으로 이동하여 providerprovider_id 추가
'name', 'email', 'password', 'provider', 'provider_id',
데이터베이스/마이그레이션 폴더로 이동하여 사용자 모드를 다음과 같이 바꿉니다.
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->nullable();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password')->nullable();
            $table->string('provider');
            $table->string('provider_id');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

php artisan migrate 명령 실행

4단계


노선 및 컨트롤러


우리는 web.php 파일에 두 개의 루트를 만들 것입니다.응용 프로그램/노선/사이트로 이동합니다.php 파일을 만들고 여기에 다음 두 개의 루트를 만듭니다
Route::get('login/{provider}', 'App\Http\Controllers\Auth\LoginController@redirectToProvider');
Route::get('{provider}/callback', 'App\Http\Controllers\Auth\LoginController@handleProviderCallback');
현재 LoginController.php을 다음 부품으로 교체
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Socialite;
use App\Models\User;
use Auth;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    /**
     * Redirect the user to the provider authentication page.
     *
     * @return Response
     */
    public function redirectToProvider($provider)
    {
        return Socialite::driver($provider)->redirect();
    }


    /**
     * Obtain the user information from provider.
     *
     * @return Response
     */
    public function handleProviderCallback($provider)
    {
        $user = Socialite::driver($provider)->user();
        $authUser = $this->findOrCreateUser($user, $provider);
        Auth::login($authUser, true);
        return redirect($this->redirectTo);
    }

    /**
     * If a user has registered before using social auth, return the user
     * else, create a new user object.
     * @param  $user Socialite user object
     * @param $provider Social auth provider
     * @return  User
     */
    public function findOrCreateUser($user, $provider)
    {
        $authUser = User::where('provider_id', $user->id)->first();
        if ($authUser) {
            return $authUser;
        }
        return User::create([
            'name'     => $user->name,
            'email'    => $user->email,
            'provider' => $provider,
            'provider_id' => $user->id
        ]);
    }
}

브라우저에서 login with github 클릭
github 계정으로 리디렉션합니다.로그인에 성공한 후 데이터베이스는 다음과 같이 해야 합니다


결론


본 강좌에서 저희는 Socialite(Laravel에서 제공하는 공식 패키지)을 사용하여 GitHub 인증서를 사용하여 로그인했습니다. 이 패키지는 Laravel 8.0을 사용하여 OAuth 인증을 하는 데 사용됩니다.

좋은 웹페이지 즐겨찾기