diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index e8e13566..4d6d0f75 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -9,8 +9,10 @@ use Utils; use Cookie; use Option; use Session; +use Validator; use App\Events; use App\Models\User; +use App\Models\Player; use Illuminate\Http\Request; use App\Exceptions\PrettyPageException; use App\Services\Repositories\UserRepository; @@ -141,10 +143,38 @@ class AuthController extends Controller event(new Events\UserRegistered($user)); + $msg = trans('auth.register.success'); + $redirect = true; + + if ($request->input('addPlayer') == 'add') { + if (!Player::where('player_name', $request->nickname)->first()) { + if (!Validator::make( + ['name' => $request->nickname], + ['name' => option('allow_chinese_playername') ? 'pname_chinese' : 'playername'] + )->fails()) { + $player = new Player; + $player->uid = $user->uid; + $player->player_name = $request->input('nickname'); + $player->preference = "default"; + $player->last_modified = Utils::getTimeFormatted(); + $player->save(); + + event(new Events\PlayerWasAdded($player)); + } else { + $msg = trans('auth.register.success-with-chinese-player-name'); + $redirect = false; + } + } else { + $msg = trans('auth.register.success-without-player'); + $redirect = false; + } + } + return json([ - 'errno' => 0, - 'msg' => trans('auth.register.success'), - 'token' => $user->getToken() + 'errno' => 0, + 'msg' => $msg, + 'token' => $user->getToken(), + 'redirect' => $redirect, ]) // set cookies ->withCookie('uid', $user->uid, 60) ->withCookie('token', $user->getToken(), 60); diff --git a/resources/assets/src/js/__tests__/auth.test.js b/resources/assets/src/js/__tests__/auth.test.js index 70e5aeed..a479efc3 100644 --- a/resources/assets/src/js/__tests__/auth.test.js +++ b/resources/assets/src/js/__tests__/auth.test.js @@ -3,6 +3,12 @@ const $ = require('jquery'); window.$ = window.jQuery = $; +jest.useFakeTimers(); + +window.blessing = { + base_url: '/' +}; + describe('tests for "captcha" module', () => { it('refresh captcha', async () => { const url = jest.fn(path => path); @@ -112,14 +118,18 @@ describe('tests for "register" module', () => { const fetch = jest.fn() .mockImplementationOnce(option => { option.beforeSend(); - return Promise.resolve({ errno: 0, msg: 'success' }); + return Promise.resolve({ errno: 0, msg: 'success', redirect: false }); + }) + .mockImplementationOnce(option => { + option.beforeSend(); + return Promise.resolve({ errno: 0, msg: 'success', redirect: true }); }) .mockImplementationOnce(() => Promise.resolve( { errno: 1, msg: 'warning' } )); const trans = jest.fn(key => key); const url = jest.fn(path => path); - const swal = jest.fn(); + const swal = jest.fn().mockImplementation(() => Promise.resolve()); const showMsg = jest.fn(); const refreshCaptcha = jest.fn(); window.fetch = fetch; @@ -136,6 +146,7 @@ describe('tests for "register" module', () => {
+ `; @@ -200,7 +211,8 @@ describe('tests for "register" module', () => { email: 'a@b.c', nickname: 'nickname', password: 'password', - captcha: 'captcha' + captcha: 'captcha', + addPlayer: 'add' } })); expect($('button').html()).toBe( @@ -208,6 +220,13 @@ describe('tests for "register" module', () => { ); expect($('button').prop('disabled')).toBe(true); expect(swal).toBeCalledWith({ type: 'success', html: 'success' }); + url.mockClear(); + expect(url).not.toBeCalled(); + + await $('button').click(); + url.mockClear(); + jest.runAllTimers(); + expect(url).toBeCalledWith('user'); await $('button').click(); expect(refreshCaptcha).toBeCalled(); diff --git a/resources/assets/src/js/auth/register.js b/resources/assets/src/js/auth/register.js index 03a51251..b87b6d10 100644 --- a/resources/assets/src/js/auth/register.js +++ b/resources/assets/src/js/auth/register.js @@ -9,7 +9,8 @@ $('#register-button').click(e => { email: $('#email').val(), password: $('#password').val(), nickname: $('#nickname').val(), - captcha: $('#captcha').val() + captcha: $('#captcha').val(), + addPlayer: $('#add-player').prop('checked') ? 'add' : '', }; (function validate({ email, password, nickname, captcha }, callback) { @@ -53,13 +54,16 @@ $('#register-button').click(e => { ' ' + trans('auth.registering') ).prop('disabled', 'disabled'); } - }).then(({ errno, msg }) => { + }).then(({ errno, msg, redirect }) => { if (errno == 0) { - swal({ type: 'success', html: msg }); + swal({ type: 'success', html: msg }) + .then(() => window.location = url('user')); - window.setTimeout(() => { - window.location = url('user'); - }, 1000); + if (redirect) { + setTimeout(() => { + window.location = url('user'); + }, 1000); + } } else { showMsg(msg, 'warning'); refreshCaptcha(); diff --git a/resources/lang/en/auth.yml b/resources/lang/en/auth.yml index b66259eb..865bf8a0 100644 --- a/resources/lang/en/auth.yml +++ b/resources/lang/en/auth.yml @@ -19,8 +19,11 @@ register: repeat-pwd: Repeat your password close: Well, this site doesn't allow any register. success: Registered successfully. Redirecting... + success-without-player: Registered successfully but you may add your player manually because the player name is duplicated. + success-with-chinese-player-name: Registered successfully but you may add your player manually because player name contains Chinese characters. max: You can't register more than :regs accounts. registered: The email address is already registered. + auto-add-player: Auto add a player with my nickname after registered successfully. forgot: title: Forgot Password diff --git a/resources/lang/zh_CN/auth.yml b/resources/lang/zh_CN/auth.yml index e5e95801..5373183f 100644 --- a/resources/lang/zh_CN/auth.yml +++ b/resources/lang/zh_CN/auth.yml @@ -19,8 +19,11 @@ register: repeat-pwd: 重复密码 close: 残念。。本皮肤站已经关闭注册咯 QAQ success: 注册成功,正在跳转~ + success-without-player: 注册成功。但您需要手动添加角色因为角色名重复。 + success-with-chinese-player-name: 注册成功。但您需要手动添加角色因为角色名中包含中文字符。 max: 你最多只能注册 :regs 个账户哦 registered: 这个邮箱已经注册过啦,换一个吧 + auto-add-player: 注册成功后自动新建同名角色 forgot: title: 忘记密码 diff --git a/resources/views/auth/register.tpl b/resources/views/auth/register.tpl index bb46cba3..81a11406 100644 --- a/resources/views/auth/register.tpl +++ b/resources/views/auth/register.tpl @@ -44,6 +44,12 @@ +