hadiabedzadeh / ssologin
This package is able to login users to different sites from another site
dev-main
2022-12-14 06:12 UTC
Requires
- php: >=7.4
- spatie/laravel-permission: ^5.5
This package is auto-updated.
Last update: 2024-05-14 09:11:58 UTC
README
Requires PHP 7.4+
Require SSO login using Composer:
composer require hadiabedzadeh/ssologin
Add sso url to config/app.php
=> 'sso_url' => 'https://www.gandomcs.com/sso'
Vendor publishe
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" php artisan vendor:publish --provider="Hadiabedzadeh\Ssologin\SsoLoginServiceProvider"
You need to publish vendor in your project
Contributing
Thank you for considering to contribute to all the contribution
You can have a look at the CHANGELOG for constant updates & detailed information about the changes.
License
SSO login is an open-sourced software licensed under the MIT license.
Client
public function sso(Request $request) { $token = $request->token; $response = Http::get('inspect.gandomcs.com/service/v1/system-profile', ['token' => $token])->json(); $email = isset($response['result']['userProfile']['email']) ? $response['result']['userProfile']['email'] : null; if (!is_null($email)) { $email = DB::selectOne("SELECT * FROM users where email = :email", ['email' => $email]); } else { return self::response('User not found', Response::HTTP_NOT_FOUND); } if(isset($email->id)) { $user = User::find($email->id); $token = auth()->guard('api')->login($user); return self::response([ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => (auth()->guard('api')->factory()->getTTL() * 60) * 10, 'user' => auth()->guard('api')->user(), 'roles' => auth()->guard('api')->user()->getRoleNames(), 'permissions' => auth()->guard('api')->user()->getPermissionsViaRoles()->pluck('name'), ], \Illuminate\Http\Response::HTTP_OK); } return Controller::response('login failed', 200); }
routes.api.php
Server
Route::group([], function () { Route::get('/system-profile', [SystemController::class, 'profile']); Route::get('/system-list', [SystemController::class, 'list']); Route::group(['middleware' => 'jwt.verify'], function ($router) { Route::get('/system-token', [SystemController::class, 'token']); }); });
Server Controller
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Lib\Helper; use App\Models\User; use App\Models\UserSystem; use Illuminate\Support\Facades\Validator; use Illuminate\Http\Response; use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; class SystemController extends Controller { public function token() { $system_id = (int)\request()->system_id; $user_id = auth()->guard('api')->id(); $created_token = hash('sha256', $system_id.$user_id. microtime(true)); $userSystem = new UserSystem; $userSystem->user_id = $user_id; $userSystem->system_id = $system_id; $userSystem->token = $created_token; $userSystem->save(); return Controller::response([ 'user_id' => $user_id, 'system_id' => $system_id, 'token' => $created_token ], Response::HTTP_OK); } public function profile(Request $request) { $validator = Validator::make($request->all(), [ 'token' => 'required|exists:user_system', ]); if ($validator->fails()) { return Controller::response($validator->validate(), 200); } $userProfile = DB::selectOne("SELECT TOP 1 u.id as user_id, u.email, u.name, u.username,u.mobile, u.ldap_user, u.ssn FROM user_system us INNER JOIN users u ON u.id = us.user_id WHERE us.token = :token ORDER BY 1 DESC", ['token' => $validator->validated()['token']]); $roles = []; foreach(User::find($userProfile->user_id)->roles as $role) { $roles[$role->id] = $role->name; } $implodedRoleId = Helper::addQouteImplode($role->id); $permissions = DB::select("SELECT name, guard_name, title, source, parent, created_at FROM permissions p INNER JOIN role_has_permissions rhp ON p.id = rhp.permission_id AND rhp.role_id IN ($implodedRoleId)"); $permissions = collect($permissions)->map(function($permissions){ $perm['name'] = $permissions->name; $perm['title'] = $permissions->title; $perm['guard_name'] = $permissions->guard_name; $perm['source'] = $permissions->source; $perm['parent'] = $permissions->parent; $perm['created_at'] = $permissions->created_at; return $perm; }); unset($userProfile->user_id); return Controller::response([ 'userProfile' => $userProfile, 'roles' => array_values($roles), 'permission' => $permissions ],200); } public function list() { $system_list = DB::select("SELECT sl.id, sl.name, sl.title,sl.link, sl.icon, IIF(um.menu_id IS null, null, 1) as active FROM system_list sl LEFT JOIN user_menu um ON um.menu_id = sl.id WHERE um.menu_id IS NOT null"); return Controller::response($system_list, Response::HTTP_OK); } }