目的
Laravelのcas認証ライブラリの一つ, subfission/casを使う機械があったのですが, 日本語での解説が見つからなかったので自分用の覚書も兼ねて使い方を書いておきます. とりあえず, casでの認証が動くようになることをこの記事のゴールにします. まだよくわかっていない部分もあるので, まだまだ試行錯誤の部分もあったりしますがご容赦を.
実行環境
Laravel 8.47.0
cas認証ライブラリ subfission/cas
導入
GitHubのwikiの通りにphp artisan vendor:publish
まで進める.
configの編集
config/cas.phpを必要に応じて編集する. 多分この2つだけやっておけばとりあえず動くはず. 他の項目については, コメントアウトで書いてある説明を読むのを頑張りましょう…
'cas_hostname' => env('CAS_HOSTNAME', 'your.cas.address'),
'cas_real_hosts' => env('CAS_REAL_HOSTS', 'your.cas.address'),
ログイン&ログアウトのAPIエンドポイントを作る
僕はroutes/api.phpに作ることにしました. 以下を追記します.
Route::get('auth/login', function(){
cas()->authenticate();
});
Route::get('auth/logout', function(){
cas()->logout();
});
ページを作る
とりあえず最低限動くページを作ってみましょう. 下記のように色々追記したり, ファイルを作成したりします.
Route::get('cas_test', 'App\Http\Controllers\CasTestController');
Route::get('main_containts', 'App\Http\Controllers\MainContaintsController');
<?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');
}
}
<!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>
<?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()
を実行するとエラーになるような気がしました(もしかしたら別の原因かもしれませんが). もしこれが正しい推測ならば, ライブラリ側で一種のセーフガードが機能しているということでしょう.
<!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