mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-10-01 01:36:00 -04:00
implement social auto registration feature
This commit is contained in:
parent
01260d95f3
commit
fe6dfcedf9
@ -79,11 +79,12 @@ class UserRepo
|
||||
/**
|
||||
* Creates a new user and attaches a role to them.
|
||||
* @param array $data
|
||||
* @param boolean autoVerifyEmail
|
||||
* @return User
|
||||
*/
|
||||
public function registerNew(array $data)
|
||||
public function registerNew(array $data, $autoVerifyEmail=false)
|
||||
{
|
||||
$user = $this->create($data);
|
||||
$user = $this->create($data, $autoVerifyEmail);
|
||||
$this->attachDefaultRole($user);
|
||||
|
||||
// Get avatar from gravatar and save
|
||||
@ -143,13 +144,14 @@ class UserRepo
|
||||
* @param array $data
|
||||
* @return User
|
||||
*/
|
||||
public function create(array $data)
|
||||
public function create(array $data, $autoVerifyEmail)
|
||||
{
|
||||
|
||||
return $this->user->forceCreate([
|
||||
'name' => $data['name'],
|
||||
'email' => $data['email'],
|
||||
'password' => bcrypt($data['password']),
|
||||
'email_confirmed' => false
|
||||
'email_confirmed' => $autoVerifyEmail
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -109,6 +109,40 @@ class SocialAuthService
|
||||
return redirect()->intended('/');
|
||||
}
|
||||
|
||||
// When a user is not logged in and no matching SocialAccount exists,
|
||||
// If the auto social registration is enabled, attach the social account, create new user and log him in.
|
||||
if (!$isLoggedIn && $socialAccount === null && setting('autosocialregistration-confirmation')) {
|
||||
|
||||
// Fill social account
|
||||
$socialAccount = $this->fillSocialAccount($socialDriver, $socialUser);
|
||||
|
||||
// Create an array of the user data to create a new user instance
|
||||
$userData = [
|
||||
'name' => $socialUser->getName(),
|
||||
'email' => $socialUser->getEmail(),
|
||||
'password' => str_random(30)
|
||||
];
|
||||
|
||||
// Check domain if domain restriction setting is set
|
||||
if (setting('registration-restrict')) {
|
||||
$restrictedEmailDomains = explode(',', str_replace(' ', '', setting('registration-restrict')));
|
||||
$userEmailDomain = $domain = substr(strrchr($socialUser->getEmail(), "@"), 1);
|
||||
if (!in_array($userEmailDomain, $restrictedEmailDomains)) {
|
||||
throw new SocialSignInException(trans('auth.registration_email_domain_invalid'), '/login');
|
||||
}
|
||||
}
|
||||
|
||||
// Register new user with autoVerifyEmail set to true and attach the social account
|
||||
$newUser = $this->userRepo->registerNew($userData, true);
|
||||
$newUser->socialAccounts()->save($socialAccount);
|
||||
$newUser->save();
|
||||
|
||||
// Log him in
|
||||
auth()->login($newUser);
|
||||
|
||||
return redirect()->intended('/');
|
||||
}
|
||||
|
||||
// When a user is logged in but the social account does not exist,
|
||||
// Create the social account and attach it to the user & redirect to the profile page.
|
||||
if ($isLoggedIn && $socialAccount === null) {
|
||||
|
@ -44,6 +44,8 @@ return [
|
||||
|
||||
'reg_settings' => 'Registration Settings',
|
||||
'reg_allow' => 'Allow registration?',
|
||||
'reg_auto_social_allow' => 'Allow auto social registration?',
|
||||
'reg_auto_social_allow_desc' => 'If the social user doesn\'t exist, automatically sign him up. Domain restriction is respected if set. Email is also automatically validated for this kind of social registration.',
|
||||
'reg_default_role' => 'Default user role after registration',
|
||||
'reg_confirm_email' => 'Require email confirmation?',
|
||||
'reg_confirm_email_desc' => 'If domain restriction is used then email confirmation will be required and the below value will be ignored.',
|
||||
|
@ -126,6 +126,11 @@
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="setting-autosocialregistration-confirmation">{{ trans('settings.reg_auto_social_allow') }}</label>
|
||||
<p class="small">{{ trans('settings.reg_auto_social_allow_desc') }}</p>
|
||||
@include('components.toggle-switch', ['name' => 'setting-autosocialregistration-confirmation', 'value' => setting('autosocialregistration-confirmation')])
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="setting-registration-confirmation">{{ trans('settings.reg_confirm_email') }}</label>
|
||||
<p class="small">{{ trans('settings.reg_confirm_email_desc') }}</p>
|
||||
|
Loading…
Reference in New Issue
Block a user