Add a option for requiring player name when register
This commit is contained in:
parent
7b8086b25b
commit
f40947c688
|
|
@ -171,6 +171,7 @@ class AdminController extends Controller
|
|||
});
|
||||
|
||||
$form->checkbox('user_can_register')->label();
|
||||
$form->checkbox('register_with_player_name')->label();
|
||||
$form->checkbox('require_verification')->label();
|
||||
|
||||
$form->text('regs_per_ip');
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ use Option;
|
|||
use Session;
|
||||
use App\Events;
|
||||
use App\Models\User;
|
||||
use App\Models\Player;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Exceptions\PrettyPageException;
|
||||
use App\Services\Repositories\UserRepository;
|
||||
|
|
@ -112,14 +113,24 @@ class AuthController extends Controller
|
|||
if (! $this->checkCaptcha($request))
|
||||
return json(trans('auth.validation.captcha'), 1);
|
||||
|
||||
$this->validate($request, [
|
||||
'email' => 'required|email',
|
||||
'password' => 'required|min:8|max:32',
|
||||
'nickname' => 'required|no_special_chars|max:255'
|
||||
]);
|
||||
|
||||
if (! option('user_can_register')) {
|
||||
if (! option('user_can_register'))
|
||||
return json(trans('auth.register.close'), 7);
|
||||
|
||||
// Validate nickname or player name
|
||||
$rule = option('register_with_player_name') ?
|
||||
['player_name' => 'required|player_name|min:'.option('player_name_length_min').'|max:'.option('player_name_length_max')] :
|
||||
['nickname' => 'required|no_special_chars|max:255'];
|
||||
$this->validate($request, array_merge([
|
||||
'email' => 'required|email',
|
||||
'password' => 'required|min:8|max:32'
|
||||
], $rule));
|
||||
|
||||
if (option('register_with_player_name')) {
|
||||
event(new Events\CheckPlayerExists($request->get('player_name')));
|
||||
|
||||
if (Player::where('player_name', $request->get('player_name'))->first()) {
|
||||
return json(trans('user.player.add.repeated'), 2);
|
||||
}
|
||||
}
|
||||
|
||||
// If amount of registered accounts of IP is more than allowed amounts,
|
||||
|
|
@ -130,15 +141,17 @@ class AuthController extends Controller
|
|||
// If the email is already registered,
|
||||
// it will return a false value.
|
||||
$user = User::register(
|
||||
$request->input('email'),
|
||||
$request->input('password'), function($user) use ($request)
|
||||
$request->get('email'),
|
||||
$request->get('password'), function($user) use ($request)
|
||||
{
|
||||
$user->ip = Utils::getClientIp();
|
||||
$user->score = option('user_initial_score');
|
||||
$user->register_at = Utils::getTimeFormatted();
|
||||
$user->last_sign_at = Utils::getTimeFormatted(time() - 86400);
|
||||
$user->permission = User::NORMAL;
|
||||
$user->nickname = $request->input('nickname');
|
||||
$user->nickname = $request->get(
|
||||
option('register_with_player_name') ? 'player_name' : 'nickname'
|
||||
);
|
||||
});
|
||||
|
||||
if (! $user) {
|
||||
|
|
@ -147,6 +160,18 @@ class AuthController extends Controller
|
|||
|
||||
event(new Events\UserRegistered($user));
|
||||
|
||||
// Add player with chosen name
|
||||
if (option('register_with_player_name')) {
|
||||
$player = new Player;
|
||||
$player->uid = $user->uid;
|
||||
$player->player_name = $request->get('player_name');
|
||||
$player->preference = 'default';
|
||||
$player->last_modified = Utils::getTimeFormatted();
|
||||
$player->save();
|
||||
|
||||
event(new Events\PlayerWasAdded($player));
|
||||
}
|
||||
|
||||
return json([
|
||||
'errno' => 0,
|
||||
'msg' => trans('auth.register.success'),
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ return [
|
|||
'site_name' => 'Blessing Skin',
|
||||
'site_description' => 'Open-source PHP Minecraft Skin Hosting Service',
|
||||
'user_can_register' => 'true',
|
||||
'register_with_player_name' => 'true',
|
||||
'require_verification' => 'false',
|
||||
'regs_per_ip' => '3',
|
||||
'ip_get_method' => '0',
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ describe('tests for "register" module', () => {
|
|||
document.body.innerHTML = `
|
||||
<input id="email" />
|
||||
<input id="nickname" />
|
||||
<input id="player-name" />
|
||||
<input id="password" />
|
||||
<input id="confirm-pwd" />
|
||||
<div id="captcha-form"></div>
|
||||
|
|
@ -194,6 +195,16 @@ describe('tests for "register" module', () => {
|
|||
expect($('#confirm-pwd').is(':focus')).toBe(true);
|
||||
|
||||
$('#confirm-pwd').val('password');
|
||||
|
||||
// Register with player name
|
||||
$('#nickname').attr('id', 'nickname-alter');
|
||||
$('button').click();
|
||||
expect(trans).toBeCalledWith('auth.emptyPlayerName');
|
||||
expect($('#player-name').is(':focus')).toBe(true);
|
||||
|
||||
// Register with nickname
|
||||
$('#nickname-alter').attr('id', 'nickname');
|
||||
$('#player-name').attr('id', 'player-name-alter');
|
||||
$('button').click();
|
||||
expect(trans).toBeCalledWith('auth.emptyNickname');
|
||||
expect($('#nickname').is(':focus')).toBe(true);
|
||||
|
|
@ -222,7 +233,23 @@ describe('tests for "register" module', () => {
|
|||
expect($('button').prop('disabled')).toBe(true);
|
||||
expect(swal).toBeCalledWith({ type: 'success', html: 'success' });
|
||||
|
||||
// Register with player name
|
||||
$('#nickname').attr('id', 'nickname-alter');
|
||||
$('#player-name-alter').attr('id', 'player-name');
|
||||
$('#player-name').val('Player Name');
|
||||
|
||||
await $('button').click();
|
||||
expect(fetch).toBeCalledWith(expect.objectContaining({
|
||||
type: 'POST',
|
||||
url: 'auth/register',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
email: 'a@b.c',
|
||||
player_name: 'Player Name',
|
||||
password: 'password',
|
||||
captcha: 'captcha'
|
||||
}
|
||||
}));
|
||||
expect(refreshCaptcha).toBeCalled();
|
||||
expect(showMsg).toBeCalledWith('warning', 'warning');
|
||||
expect($('button').html()).toBe('auth.register');
|
||||
|
|
|
|||
|
|
@ -9,10 +9,11 @@ $('#register-button').click(e => {
|
|||
email: $('#email').val(),
|
||||
password: $('#password').val(),
|
||||
nickname: $('#nickname').val(),
|
||||
player_name: $('#player-name').val(),
|
||||
captcha: $('#captcha').val(),
|
||||
};
|
||||
|
||||
(function validate({ email, password, nickname, captcha }, callback) {
|
||||
(function validate({ email, password, nickname, player_name, captcha }, callback) {
|
||||
// Massive form validation
|
||||
if (email === '') {
|
||||
showMsg(trans('auth.emptyEmail'));
|
||||
|
|
@ -31,9 +32,12 @@ $('#register-button').click(e => {
|
|||
} else if (password !== $('#confirm-pwd').val()) {
|
||||
showMsg(trans('auth.invalidConfirmPwd'), 'warning');
|
||||
$('#confirm-pwd').focus();
|
||||
} else if (nickname === '') {
|
||||
} else if ($('#nickname').length > 0 && nickname === '') {
|
||||
showMsg(trans('auth.emptyNickname'));
|
||||
$('#nickname').focus();
|
||||
} else if ($('#player-name').length > 0 && player_name === '') {
|
||||
showMsg(trans('auth.emptyPlayerName'));
|
||||
$('#player-name').focus();
|
||||
} else if (captcha === '') {
|
||||
showMsg(trans('auth.emptyCaptcha'));
|
||||
$('#captcha').focus();
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ register:
|
|||
title: Register
|
||||
button: Register
|
||||
message: Welcome to :sitename!
|
||||
player-name-intro: Player name in Minecraft, can be changed later
|
||||
nickname-intro: Whatever you like expect special characters
|
||||
repeat-pwd: Repeat your password
|
||||
close: Well, this site doesn't allow any register.
|
||||
|
|
@ -74,6 +75,7 @@ logout:
|
|||
fail: No valid session.
|
||||
|
||||
nickname: Nickname
|
||||
player-name: Minecraft player name
|
||||
email: Email
|
||||
identification: Email or player name
|
||||
password: Password
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
emptyConfirmPwd: 'Empty confirming password.',
|
||||
invalidConfirmPwd: 'Confirming password is not equal with password.',
|
||||
emptyNickname: 'Empty nickname.',
|
||||
emptyPlayerName: 'Empty player name.',
|
||||
register: 'Register',
|
||||
registering: 'Registering',
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,9 @@ general:
|
|||
user_can_register:
|
||||
title: Open Registration
|
||||
label: Everyone is allowed to register.
|
||||
register_with_player_name:
|
||||
title: Register with Player Name
|
||||
label: Require Minecraft's player name when user register
|
||||
require_verification:
|
||||
title: Account Verification
|
||||
label: Users must verify their email address first.
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ register:
|
|||
title: 注册
|
||||
button: 注册
|
||||
message: 欢迎使用 :sitename!
|
||||
player-name-intro: 游戏内的角色名,注册后可修改
|
||||
nickname-intro: 昵称可使用汉字,不可包含特殊字符
|
||||
repeat-pwd: 重复密码
|
||||
close: 残念。。本皮肤站已经关闭注册咯 QAQ
|
||||
|
|
@ -74,6 +75,7 @@ logout:
|
|||
fail: 并没有有效的 session
|
||||
|
||||
nickname: 昵称
|
||||
player-name: 游戏内角色名
|
||||
email: Email
|
||||
identification: Email 或角色名
|
||||
password: 密码
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
emptyConfirmPwd: '确认密码不能为空',
|
||||
invalidConfirmPwd: '密码和确认的密码不一样诶?',
|
||||
emptyNickname: '你还没有填写昵称哦',
|
||||
emptyPlayerName: '你还没有填写角色名哦',
|
||||
register: '注册',
|
||||
registering: '注册中',
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,9 @@ general:
|
|||
user_can_register:
|
||||
title: 开放注册
|
||||
label: 任何人都可以注册
|
||||
register_with_player_name:
|
||||
title: 使用角色名注册
|
||||
label: 注册时要求填写游戏内角色名
|
||||
require_verification:
|
||||
title: 邮箱验证
|
||||
label: 用户必须验证邮箱后才能使用皮肤托管等功能
|
||||
|
|
|
|||
|
|
@ -26,10 +26,17 @@
|
|||
<span class="glyphicon glyphicon-log-in form-control-feedback"></span>
|
||||
</div>
|
||||
|
||||
@if (option('register_with_player_name'))
|
||||
<div class="form-group has-feedback" title="{{ trans('auth.register.player-name-intro') }}" data-placement="top" data-toggle="tooltip">
|
||||
<input id="player-name" type="text" class="form-control" placeholder="{{ trans('auth.player-name') }}">
|
||||
<span class="glyphicon glyphicon-pencil form-control-feedback"></span>
|
||||
</div>
|
||||
@else
|
||||
<div class="form-group has-feedback" title="{{ trans('auth.register.nickname-intro') }}" data-placement="top" data-toggle="tooltip">
|
||||
<input id="nickname" type="text" class="form-control" placeholder="{{ trans('auth.nickname') }}">
|
||||
<span class="glyphicon glyphicon-pencil form-control-feedback"></span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
|
|
|
|||
|
|
@ -275,6 +275,58 @@ class AuthControllerTest extends TestCase
|
|||
'msg' => trans('validation.max.string', ['attribute' => 'password', 'max' => 32])
|
||||
]);
|
||||
|
||||
// The register_with_player_name option is set to true by default.
|
||||
// Should return a warning if `player_name` is empty
|
||||
$this->post(
|
||||
'/auth/register',
|
||||
[
|
||||
'email' => 'a@b.c',
|
||||
'password' => '12345678',
|
||||
'captcha' => 'a'
|
||||
],
|
||||
['X-Requested-With' => 'XMLHttpRequest']
|
||||
)->seeJson([
|
||||
'errno' => 1,
|
||||
'msg' => trans('validation.required', ['attribute' => 'Player Name'])
|
||||
]);
|
||||
|
||||
// Should return a warning if `player_name` is invalid
|
||||
option(['player_name_rule' => 'official']);
|
||||
$this->post(
|
||||
'/auth/register',
|
||||
[
|
||||
'email' => 'a@b.c',
|
||||
'password' => '12345678',
|
||||
'player_name' => '角色名',
|
||||
'captcha' => 'a'
|
||||
],
|
||||
['X-Requested-With' => 'XMLHttpRequest']
|
||||
)->seeJson([
|
||||
'errno' => 1,
|
||||
'msg' => trans('validation.player_name', ['attribute' => 'Player Name'])
|
||||
]);
|
||||
|
||||
// Should return a warning if `player_name` is too long
|
||||
$this->post(
|
||||
'/auth/register',
|
||||
[
|
||||
'email' => 'a@b.c',
|
||||
'password' => '12345678',
|
||||
'player_name' => str_random(option('player_name_length_max') + 10),
|
||||
'captcha' => 'a'
|
||||
],
|
||||
['X-Requested-With' => 'XMLHttpRequest']
|
||||
)->seeJson([
|
||||
'errno' => 1,
|
||||
'msg' => trans('validation.max.string', [
|
||||
'attribute' => 'Player Name',
|
||||
'max' => option('player_name_length_max')
|
||||
])
|
||||
]);
|
||||
|
||||
// Test registering with nickname
|
||||
option(['register_with_player_name' => false]);
|
||||
|
||||
// Should return a warning if `nickname` is empty
|
||||
$this->post(
|
||||
'/auth/register',
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user