登录时如何创建(注册)用户?

时间:2018-07-17 12:28:43

标签: php laravel

我在我的网站中定义了一个名为“定义用户”的选项。因此,我需要在当前的laravel注册系统中进行一些更改。其实我做了我所需要的:

@Override
public void onViewStateRestored( @Nullable Bundle savedInstanceState )
{
    super.onViewStateRestored( savedInstanceState );
    if( savedInstanceState != null )
    {
        boolean[]          groupExpandedArray   = savedInstanceState.getBooleanArray( "groupExpandedArray" );
        int                firstVisiblePosition = savedInstanceState.getInt( "firstVisiblePosition", -1 );
        ExpandableListView expandable           = getView() instanceof ViewGroup ? getView().findViewById( R.id.expandable ) : null;
        if( expandable != null && groupExpandedArray != null )
        {
            for( int i = 0; i < groupExpandedArray.length; i++ )
            {
                if( groupExpandedArray[i] )
                    expandable.expandGroup( i );
            }
            if( firstVisiblePosition >= 0 )
                expandable.setSelection( firstVisiblePosition );
        }
    }
}

如您所知,上面的函数位于public function register(Request $request) { $this->validator($request->all())->validate(); event(new Registered($user = $this->create($request->all()))); if ( !isset($request->registered_by_id) ) { -- added $this->guard()->login($user); $status = ""; -- added $msg = ""; -- added } else { -- added $status = "define-user-alert-success"; -- added $msg = "the user registered successfully"; } -- added return $this->registered($request, $user) ?: redirect($this->redirectPath()) ->with($status, $msg); -- added } 路径下。问题是,当我上载网站并执行/vendor/laravel/framework/src/illuminate/Foundation/Auth/RegisterUsers.php命令时,我所做的所有更改都将被忽略。

您知道如何将所做的更改保存在composer install目录中吗?

3 个答案:

答案 0 :(得分:1)

composer install将覆盖您所做的更改,因为它只是从公共存储库中获取最新版本并进行安装。

我建议以下其中一项;

  1. 创建您自己的laravel分支,并让作曲家将其加载到默认laravel之上。我最近用Symfony组件fork进行了此操作,其想法是将repo分支名称更改为修改后的分支名称,并使用您自己的repo覆盖源。 Instruction from my fork are here

  2. 执行composer install后,通过手动上传文件(不推荐,仅使用权宜之计)

  3. 覆盖/扩展原始类this answer lays out the process nicely

  4. 根据this answer on Laracasts中的定义(与您的情况非常相似),在用户注册后使用事件监听器执行代码。

希望这会有所帮助!

答案 1 :(得分:1)

是的,不要编辑vendor中的文件。

trait用于应用程序中的RegisterController,而不是框架中。您只需在控制器中重写该方法即可。

也许您的更改可以在注册后调用的registered中进行,所以您不必覆盖register本身的此功能(因为registered是一个空白的方法,等待您覆盖)

答案 2 :(得分:0)

我强烈建议您不要对核心框架进行任何更改-除了您提到的问题之外,它还会使升级变得极为困难。

幸运的是,Laravel使用户注册变得容易。您需要做的就是创建一个新的控制器(例如UserController),然后使用类似的函数为其创建模型...

public function registerUser(Request $request){
    $request->validate([
        'username' => 'bail|required|unique:users,username|max:255',
        'first_name' => 'required',
        'last_name' => 'required',
        'email' => 'required|email'
    ]);

    $user = User::create([
        'first_name' => $request->first_name,
        'last_name' => $request->last_name,
        'username' => $request->username,
        'password' => Hash::make($request->password),
        'email' => $request->email
    ]);

    return redirect('/settings/people/'.$user->user_id);
}

此处的关键是在将模型提交到数据库之前,使用哈希外观对密码进行加密。否则,本质上就像使用任何其他模型一样。