既存のレガシーな PHP アプリに対して機能を追加しようとしていますが、技術的負債を返済していくにあたり、追加部分は Laravel8 で実装しようとしています。当方、Laravel 自体あまり詳しくなく、書籍や Web で情報収集している状態です。
設置ディレクトリや URL マッピング等はレガシー部分とは独立してデプロイするつもりですが、残念ながらセッション管理部分は既存の仕組みを使うしかなさそうです。
レガシーアプリでは、セッション管理部分は PHP のセッション(PHP Native Session - いわゆる $_SESSION) を使っているのですが、PHP Native Session は Laravel5 以降はサポートされなくなったようです。ついては、Laravel8 で PHP Native Session 機能を使うにあたり、手数が少なそうな手法をご教示いただきたく思います。
なお、ログイン画面やログアウト画面は既存のものを使い、パスワード忘れとかパスワード変更なども実装する予定はないので、単に「ログイン済みかどうか($_SESSION に特定のキーがあるかどうか)、またログイン済みの場合、そのユーザIDはなにか(そのキーの値)」だけがわかればいいと思っています。既存のユーザテーブルを Model 化する部分はすでにできています。
使うべき機能は必要最小限、middleware とか Guard あたりかなと想像していますが、その他にも UserProvider とか Authenticatable とか、調べるたびに増えていく状態です、、、
参考になりそうなところ:
シンプルですが、Laravel5 用なので変更が大きそう?
既存のコードが示されていないので、これでやれそうかという判断がつきません。
Laravel5 ベース、必要なコンポーネントが多すぎ‥。すべて必要?
ここを参考にしながら実装していますが、やりたいことは微妙に違う感じ、、、
以上、よろしくお願いします。参考までに、既存のロジックを示します。
php
1<?php 2class MyAuthLib 3{ 4 var $login_url = LOGIN_URL; 5 var $logout_url = LOGOUT_URL; 6 var $start_url = START_URL; 7 var $session_account = "account"; 8 9 function login_session() 10 { 11 @session_start(); 12 if ( isset($_SESSION[$this->session_account]) != false ) 13 { 14 header("Location: {$this->start_url}"); 15 exit; 16 } 17 } 18 19 function login_success($name) 20 { 21 session_regenerate_id(true); 22 $_SESSION[$this->session_account] = $name; 23 header("Location: {$this->start_url}"); 24 } 25 26 function check_session() 27 { 28 if ( defined("COOKIE_LIFETIME") != FALSE ) 29 session_set_cookie_params(COOKIE_LIFETIME); 30 @session_start(); 31 if ( isset($_SESSION[$this->session_account]) == false ) 32 { 33 header("Location: {$this->login_url}"); 34 exit; 35 } 36 } 37 38 function logout_session($token) 39 { 40 if ( $this->check_token($token) == FALSE ) 41 return FALSE; // error 42 if( isset($_SESSION) != FALSE ) 43 { 44 setcookie(session_name(), '', 1); 45 session_destroy(); 46 } 47 return TRUE; 48 } 49 50 function generate_token() 51 { 52 return hash("sha256", session_id() ); 53 } 54 55 function check_token($token) 56 { 57 return strcasecmp($token, $this->generate_token()) == 0; 58 } 59} 60
既存のテーブルを Model 化したもの:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Foundation\Auth\User as Authenticatable; class LoginUser extends Authenticatable { /** * See: https://readouble.com/laravel/8.x/ja/eloquent.html * デフォルトから逸脱する場合に必要なプロパティ */ protected $table = 'loginUser'; // テーブル名は loginusers ではなく 'loginUser' protected $primaryKey = 'userID'; // 主キーは 'id' ではなく 'userID' public $incrementing = false; // 主キーが増分整数値ではない protected $keyType = 'string'; // 主キーが整数ではなく文字列 const CREATED_AT = 'createdAt'; // 作成日時のフィールド名 const UPDATED_AT = 'updateAt'; // 更新日時のフィールド名 // 以下、Authenticatable 関連 /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'account' ]; public function getAuthIdentifierName() { return 'account'; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/04 08:12
2021/08/05 20:35