Laravel - Как реализовать панель действий пользователя при входе в систему для Socialite - PullRequest
0 голосов
/ 01 февраля 2020

Используя Laravel -5.8, я создал пользовательскую панель активности входа с Laravel Auth, используя базу данных. Это работало отлично тогда. На панели инструментов я мог видеть следующее:

  1. Пользователи, вошедшие в систему сегодня
  2. Пользователи, вошедшие в систему за последние 7 дней
  3. Пользователи, вошедшие в систему за последние 30 дней

    class LoginController extends Controller
    {
      use AuthenticatesUsers;
      protected $redirectTo = '/dashboard';
    
      public function __construct()
      {
        $this->middleware('guest')->except('logout');
      }
    
      function authenticated(Request $request, $user)
      {
        $user->update([
        'last_login_at' => now(),
        ]);
      }
    }
    

и контроллер приборной панели

 class DashboardController extends Controller
 {
   public function __construct()
   {
     $this->middleware('auth');
   }
   public function user()
   {
    $number_blocks = [
    [
        'title' => 'Users Logged In Today',
        'number' => User::whereDate('last_login_at', today())->count()
    ],
    [
        'title' => 'Users Logged In Last 7 Days',
        'number' => User::whereDate('last_login_at', '>', today()->subDays(7))->count()
    ],
    [
        'title' => 'Users Logged In Last 30 Days',
        'number' => User::whereDate('last_login_at', '>', today()->subDays(30))->count()
    ],
   ];

   $list_blocks = [
    [
        'title' => 'Last Logged In Users',
        'entries' => User::orderBy('last_login_at', 'desc')
            ->take(5)
            ->get(),
    ],
    [
        'title' => 'Users Not Logged In For 30 Days',
        'entries' => User::where('last_login_at', '<', today()->subDays(30))
            ->orwhere('last_login_at', null)
            ->orderBy('last_login_at', 'desc')
            ->take(5)
            ->get()
    ],
];

$chart_settings = [
    'chart_title'        => 'Users By Months',
    'chart_type'         => 'line',
    'report_type'        => 'group_by_date',
    'model'              => 'App\User',
    'group_by_field'     => 'last_login_at',
    'group_by_period'    => 'month',
    'aggregate_function' => 'count',
    'filter_field'       => 'last_login_at',
    'column_class'       => 'col-md-12',
    'entries_number'     => '5',
 ];
 $chart = new LaravelChart($chart_settings);

 return view('user-default', compact('number_blocks', 'list_blocks', 'chart'));
 }
}

На этом этапе я смог увидеть эти подробности на приборной панели.

Но когда я решу чтобы изменить аутентификацию на Socialite Azure AD Auth, как показано ниже:

class LoginController extends Controller
{
  use AuthenticatesUsers;
  protected $redirectTo = '/dashboard';

  public function __construct()
  {
    $this->middleware('guest')->except('logout');
 }

 public function redirectToProvider()
 {
  return Socialite::with('azure')->redirect();
 }

 public function handleProviderCallback()
 {
   $azureUser = Socialite::with('azure')->user();
   try 
   {
    $user = User::where('email', $azureUser->email)->orWhere('username', $azureUser->user['mailNickname'])->first();
    if($user)
    {
        if(Auth::loginUsingId($user->id))
        {
           return redirect()->route('dashboard');
        }
    }
 } 
 catch(\Exception $e) 
 {
    session()->flash("error", "Your error message");
    return redirect(route('login'));
 }
}

 function authenticated(Request $request, $user)
 {
    $user->update([
      'last_login_at' => now(),
    ]);
   }
 }

Я заметил, что действия пользователей больше не отображаются на панели входа в систему.

Как сделать Я разрешаю это?

Спасибо.

...