如何覆盖Laravel 5中的注册功能

时间:2015-04-13 04:28:06

标签: php authentication laravel-5

我试图按照this问题中的建议覆盖Laravel 5中的注册功能。但是,在我的情况下,我并没有尝试从注册页面重定向用户。相反,我只想注册新用户但保持当前(管理员)用户登录。默认功能验证然后登录新用户,然后重定向到" home"。所以,这是我尝试添加到AuthController.php:

// 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');
}

我以为我很聪明,只是创建新帐户,然后将当前用户重定向到管理页面。但是,没有创建用户并且没有发生重定向。任何想法都会非常感激!

4 个答案:

答案 0 :(得分:1)

如果我是你,我宁愿在我的模型中使用“创建”静态方法,例如:对于注册,我使用“用户”模型,然后我只需使用:

User::create($data = array());

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

return redirect('admin');

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

答案 1 :(得分:1)

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

您需要覆盖寄存器功能。

答案 2 :(得分:0)

我想我找到了答案(就我而言)。 我复制了注册功能,却忘记了删除电子邮件中已确认的确认

答案 3 :(得分:0)

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

为此,您需要覆盖特征RegistersUsers的register()方法。

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

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

}

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

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

但是您不能直接编辑Laravel core或/ vendor内部的任何部分。您可以做的是重写相同的方法,并将其放入RegisterController中,如下所示:

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参数或方法,这样您的注册用户将进入正确的页面。