首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何覆盖Laravel 5中的注册函数

如何覆盖Laravel 5中的注册函数
EN

Stack Overflow用户
提问于 2015-04-13 12:28:06
回答 4查看 6.2K关注 0票数 4

我试图通过遵循this问题中的建议来覆盖Laravel 5中的注册函数。然而,在我的例子中,我并没有试图从注册页面重定向用户。相反,我只想注册新用户,但保持当前(admin)用户登录。默认功能验证然后登录新用户,然后重定向到"home“。所以,下面是我尝试添加到AuthController.php中的内容:

代码语言:javascript
复制
// OVERRIDE FUNCTION IN AuthenticatesAndRegistersUsers (located under /Illuminate/Foundation/Auth)
public function postRegister(Request $request) {
    $validator = $this->registrar->validator($request->all());

    if ($validator->fails())
    {
        $this->throwValidationException(
            $request, $validator
        );
    }

    //$this->auth->login($this->registrar->create($request->all()));
    $this->registrar->create($request->all());

    return redirect('admin');
}

我认为我很聪明,只是创建了一个新帐户,然后将当前用户重定向到一个管理页面。但是,没有创建用户,也没有发生重定向。如果有任何想法,我们将不胜感激!

EN

回答 4

Stack Overflow用户

发布于 2015-04-13 14:08:52

如果我是你,我宁愿在我的模型中使用"create“静态方法,例如:对于注册,我使用"User”模型,然后我只需简单地使用:

代码语言:javascript
复制
User::create($data = array());

它只是将数据存储到用户模型中的表中。然后简单地说:

代码语言:javascript
复制
return redirect('admin');

并且新用户将不会登录到该站点。它只是将数据存储到数据库表中。

票数 1
EN

Stack Overflow用户

发布于 2017-02-08 06:31:47

看一下artisan rout:list,postRegister在哪里被调用?

您需要覆盖注册函数。

票数 1
EN

Stack Overflow用户

发布于 2019-09-16 12:15:01

您可能想要更改的另一个默认行为是在注册表单之后立即自动登录。您可能希望将用户重定向到一个单独的“成功”页面,并期望他们稍后手动登录。

为此,需要重写特征寄存器的RegistersUsers ()方法。

我们上面讨论的控制器,RegisterController,使用了这个重要的特性:

代码语言:javascript
复制
class RegisterController extends Controller
{
use RegistersUsers;
// ... all other code of controller
This trait performs all the “dirty work” of registration. It is part of the core 
framework, located in 
vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php:

trait RegistersUsers
{
/**
 * Handle a registration request for the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function register(Request $request)
{
    $this->validator($request->all())->validate();

    event(new Registered($user = $this->create($request->all())));

    $this->guard()->login($user);

    return $this->registered($request, $user)
                    ?: redirect($this->redirectPath());
}

// ... A few other methods

}

要禁用自动登录,您需要删除以下特定行:

代码语言:javascript
复制
$this->guard()->login($user);

但是你不能直接编辑Laravel核心,也不能编辑/vendor内部的任何部分。您可以做的是覆盖相同的方法并将其放入RegisterController中,如下所示:

代码语言:javascript
复制
namespace App\Http\Controllers\Auth;

// DON'T FORGET TO ADD THESE TWO!
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Registered;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{

// ... Other methods

/**
 * Handle a registration request for the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function register(Request $request)
{
    $this->validator($request->all())->validate();

    event(new Registered($user = $this->create($request->all())));

    return $this->registered($request, $user)
        ?: redirect($this->redirectPath());
}

}

最后,注意redirectTo参数或方法,如上一篇技巧所示,这样您的注册用户才能登录到正确的页面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29597848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档