1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LaravelでCAS認証

Posted at

目的

Laravelのcas認証ライブラリの一つ, subfission/casを使う機械があったのですが, 日本語での解説が見つからなかったので自分用の覚書も兼ねて使い方を書いておきます. とりあえず, casでの認証が動くようになることをこの記事のゴールにします. まだよくわかっていない部分もあるので, まだまだ試行錯誤の部分もあったりしますがご容赦を.

実行環境

Laravel 8.47.0
cas認証ライブラリ subfission/cas

導入

GitHubのwikiの通りにphp artisan vendor:publishまで進める.

configの編集

config/cas.phpを必要に応じて編集する. 多分この2つだけやっておけばとりあえず動くはず. 他の項目については, コメントアウトで書いてある説明を読むのを頑張りましょう…

config/cas.php
'cas_hostname' => env('CAS_HOSTNAME', 'your.cas.address'),
'cas_real_hosts' => env('CAS_REAL_HOSTS', 'your.cas.address'),

ログイン&ログアウトのAPIエンドポイントを作る

僕はroutes/api.phpに作ることにしました. 以下を追記します.

routes/api.php
Route::get('auth/login', function(){
    cas()->authenticate();
});
Route::get('auth/logout', function(){
    cas()->logout();
});

ページを作る

とりあえず最低限動くページを作ってみましょう. 下記のように色々追記したり, ファイルを作成したりします.

routes/web.php
Route::get('cas_test', 'App\Http\Controllers\CasTestController');
Route::get('main_containts', 'App\Http\Controllers\MainContaintsController');
app/Http/Controllers/CasTestController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;


class CasTestController extends Controller
{
    public function __invoke()
    {
        return view('cas_test');
    }
}
cas_test.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    @if(! cas()->checkAuthentication())
    <a href="api/auth/login">
        ログイン
    </a>
        not logged in
    @else
        {{ cas()->user() }} でログインしています
        <a href="api/auth/logout">
            ログアウト
        </a>
    @endif
</html>
app/Http/Controllers/MainContaintsController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;


class MainContaintsController extends Controller
{
    public function __invoke()
    {
        if (cas()->checkAuthentication()){
            $user_name = cas()->user();
            return view('main_containts', conpact('usetname'));
        } else {
            /* ログインしていない場合の処理を適当に */
        }
    }
}

最初は if (cas()->checkAuthentication())無しで実装しようとしたのですが, これを呼ばずにcas()->user()を実行するとエラーになるような気がしました(もしかしたら別の原因かもしれませんが). もしこれが正しい推測ならば, ライブラリ側で一種のセーフガードが機能しているということでしょう.

main_containts.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    welcome {{ username }}!!
</html>

結果

ログイン/ログアウト時のリダイレクトなどができていませんが, ブラウザで/cas_testにアクセスしてログインした後に/main_containtsにアクセスすると, CASでのユーザー名が表示されると思います.

参考

stackoverflow Trying to set up CAS with my Laravel project
subfission/cas GitHub wiki

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?