Tôi đang cố gắng triển khai một dấu hiệu đơn trên nhiều tên miền. Khái niệm này là ví dụ khá đơn giản để gửi tokens người dùng duy nhất và sau đó xác minh các thẻ để tìm ra người dùng và sau đó đăng nhập anh trong.Vấn đề Laravel với loginUsingId (Xác thực Thủ công)
Bây giờ sau khi xác minh các dấu hiệu và sau đó lấy người sử dụng, tôi làm điều gì đó như thế này
$loggedInUser = Auth::loginUsingId($user->id, true);
Bây giờ tôi có một trung gian tùy chỉnh mà nó kiểm tra đầu tiên cho một người dùng đăng nhập, tức là
Auth::Check()
trên đây hoạt động tốt cho lần đầu tiên. Nhưng khi làm mới Auth :: check() không được xác thực. Tôi cũng đã thử sử dụng tất cả các trình điều khiển phiên khác nhau nhưng vẫn không hoạt động.
Tôi đã sử dụng một mã tương tự trên laravel 5.2 và nó đã hoạt động. Nhưng trên laravel 5.3, nó không xác nhận các yêu cầu liên tục.
Chỉnh sửa: Để tôi chỉ cho bạn Mã số Tôi chưa sửa đổi AuthServiceProvider hoặc bất kỳ người bảo vệ nào khác. Tôi có mô hình người dùng bên trong một thư mục nhưng tôi đã sửa đổi đường dẫn trong auth.php.
Đây là con đường mà điểm domain1 tới:
http://domain2.com/ {{$ vai trò}}/{{$ tuyến đường}}/singlesignon/{{$ thẻ}}
này sau đó được vớt lên verifySingleSignOn phương pháp bên trong loginController mà trong vai trò, tuyến đường mà người dùng đến từ tên miền khác và mã thông báo. Người dùng sau đó được chuyển hướng đến các tuyến đường tương tự, nhưng trên miền2. Ở đây tôi có thể nhận được thành công id người dùng trước khi tự đăng nhập.
public function verifySingleSignOn($role, $route, $token)
{
// Fetch Single Signon
$userRepository = new UserRepository();
$user = $userRepository->checkForSingleSignOnToken($token, ['id']);
// Check if Token Exists
if (isset($user->id) && is_int($user->id) && $user->id != 0) {
// Manually Logging a user (Here is successfully recieve the user id)
$loggedInUser = Auth::loginUsingId($user->id);
if (!$loggedInUser) {
// If User not logged in, then Throw exception
throw new Exception('Single SignOn: User Cannot be Signed In');
}
$redirectTo = $role . '/' . $route;
return redirect($redirectTo);
} else {
return Auth::logout();
}
}
Sau đó, tôi có GlobalAdminAuth này middleware
// Check if logged in
if(Auth::Check()){
$user = Auth::User();
// Check if user is active and is a globaladmin
if(!$user->isGlobalAdmin() || !$user->isActive()){
return redirect()->guest('login');
}
}else{
return redirect()->guest('login');
}
return $next($request);
Bây giờ lần đầu tiên tất cả mọi thứ hoạt động tốt và người dùng di chuyển thông qua các trung gian thành công. nhưng lần thứ hai câu lệnh khác được kích hoạt.
Chỉnh sửa: Mã cho checkForSingleSignOnToken
public function checkForSingleSignOnToken($token, $columns = array('*'))
{
return User::where('single_signon', $token)->first($columns);
}
Trình điều khiển phiên của bạn là gì? –
Tôi đã thử tất cả chúng ngoại trừ redis. –
Vui lòng hiển thị mã của phương thức 'checkForSingleSignOnToken' –