Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.2注册后发送密码重置_Php_Laravel - Fatal编程技术网

Php Laravel 5.2注册后发送密码重置

Php Laravel 5.2注册后发送密码重置,php,laravel,Php,Laravel,我修改了authController.php文件,以执行项目所需的一些操作。它工作得很好,只需要再做一次改变。现在控制器看起来像这样: <?php namespace App\Http\Controllers\Auth; use App\User; use App\Role; use Mail; use Validator; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\Throttles

我修改了authController.php文件,以执行项目所需的一些操作。它工作得很好,只需要再做一次改变。现在控制器看起来像这样:

    <?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Role;
use Mail;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Http\Request;

use Illuminate\Foundation\Auth\ResetsPasswords;

class AuthController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Registration & Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users, as well as the
    | authentication of existing users. By default, this controller uses
    | a simple trait to add these behaviors. Why don't you explore it?
    |
    */

    use AuthenticatesAndRegistersUsers, ThrottlesLogins, ResetsPasswords;

    /**
     * Where to redirect users after login / registration.
     *
     * @var string
     */
    protected $redirectTo = '/add';

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware($this->guestMiddleware(), ['except' => 'logout']);


    }


     /**
     * Overwrite the Laravel 5.2 standard registration 
     * so user will not be logged in automatically.
     *
     * @param  array  $request
     * @return Register
     */
    public function register(Request $request)
    {
        $validator = $this->validator($request->all());

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

        $this->create($request->all());

        return redirect($this->redirectPath());
    }

    /**
     * Extend password reset email to user for when registering
     */

    public function sendResetLinkEmail(Request $request)
    {
        $this->validateSendResetLinkEmail($request);

        $broker = $this->getBroker();

        $this->subject = "First Time User Setup";
        $broker->emailView = "auth.emails.password";

        $response = Password::broker($broker)->sendFirstTimeSetup(
            $this->getSendResetLinkEmailCredentials($request),
            $this->resetEmailBuilder()
        );

        switch ($response) {
            case Password::RESET_LINK_SENT:
                return $this->getSendResetLinkEmailSuccessResponse($response);
            case Password::FIRST_TIME_SETUP:
                return $this->getSendFirstTimeSetupEmailSuccessResponse($response);
            case Password::INVALID_USER:
            default:
                return $this->getSendResetLinkEmailFailureResponse($response);
        }
    }

    public function getSendFirstTimeSetupEmailSuccessResponse($response) 
    {
        return redirect()->back()->with('status', trans($response));
    }


    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'first-name' => 'required|max:255',
            'last-name' => 'required|max:255',
            'phone' => 'required|max:255',
            'form' => 'max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(Request $request,  array $data ) 
    {
        //Create the user
        $user = User::create([
            'first_name' => $data['first-name'],
            'last_name' => $data['last-name'],
            'phone' => $data['phone'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);

        return $this->postEmail($request);

        /*
        Mail::send('auth.emails.registered', ['user' => $user], function ($m) use ($user) 
        {
            $m->to($user->email, $user->first_name)->subject('You Have Been Added');
        });*/

        //Is it a User? Then give them that role
        if ($data['user-role'] == 'user')
        {
            $role = Role::where('name', '=', 'user')->firstOrFail();
            $user = User::find($user->id);
            $user->roles()->attach($role->id);
        }

        //Is it an Admin? Then give them that role
        if ($data['user-role'] == 'admin')
        {
            $role = Role::where('name', '=', 'owner')->firstOrFail();
            $user = User::find($user->id);
            $user->roles()->attach($role->id);
        }

        return $user;
    }





}

其中一个技巧是了解
Auth
工厂内部的
特性如何工作

首先,我们需要使用
use-illumb\Foundation\Auth\ResetsPasswords特征以及
身份验证和注册用户
节流登录
特征

use AuthenticatesAndRegistersUsers, ThrottlesLogins, ResetsPassword;
接下来,我们需要确保将一个
$request
实例传递给我们的
create
方法:

protected function create(Illuminate\Http\Request $request, array $data)
旁注-我建议不要将
$data
对象作为参数传递,而是使用
$request
。您可以这样获取数据:
$request->get('first-name')
,等等

最后,我们将
$request
传递给
postmail()
函数:

return $this->postEmail($request);
public function postEmail(Request $request)
{
    return $this->sendResetLinkEmail($request);
}
public function sendResetLinkEmail(Request $request)
{
    $this->validateSendResetLinkEmail($request);

    $broker = $this->getBroker();

    $response = Password::broker($broker)->sendResetLink(
        $this->getSendResetLinkEmailCredentials($request),
        $this->resetEmailBuilder()
    );

    switch ($response) {
        case Password::RESET_LINK_SENT:
            return $this->getSendResetLinkEmailSuccessResponse($response);
        case Password::INVALID_USER:
        default:
            return $this->getSendResetLinkEmailFailureResponse($response);
    }
}
//...

$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
//...
$this->subject = "First Time User Setup";
$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
这将通过管道将$request发送到
ResetsPasswords\postmail
函数:

return $this->postEmail($request);
public function postEmail(Request $request)
{
    return $this->sendResetLinkEmail($request);
}
public function sendResetLinkEmail(Request $request)
{
    $this->validateSendResetLinkEmail($request);

    $broker = $this->getBroker();

    $response = Password::broker($broker)->sendResetLink(
        $this->getSendResetLinkEmailCredentials($request),
        $this->resetEmailBuilder()
    );

    switch ($response) {
        case Password::RESET_LINK_SENT:
            return $this->getSendResetLinkEmailSuccessResponse($response);
        case Password::INVALID_USER:
        default:
            return $this->getSendResetLinkEmailFailureResponse($response);
    }
}
//...

$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
//...
$this->subject = "First Time User Setup";
$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
这将通过管道将其连接到
ResetsPasswords\sendResetLinkEmail
功能:

return $this->postEmail($request);
public function postEmail(Request $request)
{
    return $this->sendResetLinkEmail($request);
}
public function sendResetLinkEmail(Request $request)
{
    $this->validateSendResetLinkEmail($request);

    $broker = $this->getBroker();

    $response = Password::broker($broker)->sendResetLink(
        $this->getSendResetLinkEmailCredentials($request),
        $this->resetEmailBuilder()
    );

    switch ($response) {
        case Password::RESET_LINK_SENT:
            return $this->getSendResetLinkEmailSuccessResponse($response);
        case Password::INVALID_USER:
        default:
            return $this->getSendResetLinkEmailFailureResponse($response);
    }
}
//...

$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
//...
$this->subject = "First Time User Setup";
$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
最终会发出一封电子邮件

使整个过程正常工作的关键是
illighted\Http\Request
的实例始终包含
email
字段

注意

sendResetLinkEmail
函数返回的
响应可能与您发送的响应不同。当用户刚刚创建帐户时,可能会被密码重置请求弄糊涂。相反,您可能希望发送一个
首次设置
。为此,您需要创建自己的
密码代理
密码门面

接下来,让我们创建两个新目录:

App\Brokers
App\Facades 
接下来,在
App\Facades
中创建一个新文件,并将其命名为
Password.php
。相应地命名文件的名称空间,并扩展现有密码外观。此外,我们还将添加另一个
常量
,作为
首次设置
的可观察响应类型

<?php

namespace App\Facades;

class Password extends \Illuminate\Support\Facades\Password {
    /**
     * Constant representing a successfully sent reminder.
     *
     * @var string
     */
    const FIRST_TIME_SETUP = 'passwords.first_time_setup';
}
现在我们需要复制前面看到的
sendResetLinkEmail
函数,并将其移动到
AuthController
中。这将允许我们修改我们使用的
密码
外观,并修改
开关
语句以支持我们的
首次设置

public function sendResetLinkEmail(Request $request)
{
    $this->validateSendResetLinkEmail($request);

    $broker = $this->getBroker();

    $response = Password::broker($broker)->sendFirstTimeSetup(
        $this->getSendResetLinkEmailCredentials($request),
        $this->resetEmailBuilder()
    );

    switch ($response) {
        case Password::RESET_LINK_SENT:
            return $this->getSendResetLinkEmailSuccessResponse($response);
        case Password::FIRST_TIME_SETUP:
            return $this->getSendFirstTimeSetupEmailSuccessResponse($response);
        case Password::INVALID_USER:
        default:
            return $this->getSendResetLinkEmailFailureResponse($response);
    }
}
然后,同样在
AuthController
中,我们将创建另一个函数来返回
响应

public function getSendFirstTimeSetupEmailSuccessResponse($response) 
{
    return redirect()->back()->with('status', trans($response));
}
最后,如果要在发送时覆盖函数使用的
视图
,只需在调用
->sendFirstTimeSetup()函数之前覆盖
$broker->emailView
属性即可:

return $this->postEmail($request);
public function postEmail(Request $request)
{
    return $this->sendResetLinkEmail($request);
}
public function sendResetLinkEmail(Request $request)
{
    $this->validateSendResetLinkEmail($request);

    $broker = $this->getBroker();

    $response = Password::broker($broker)->sendResetLink(
        $this->getSendResetLinkEmailCredentials($request),
        $this->resetEmailBuilder()
    );

    switch ($response) {
        case Password::RESET_LINK_SENT:
            return $this->getSendResetLinkEmailSuccessResponse($response);
        case Password::INVALID_USER:
        default:
            return $this->getSendResetLinkEmailFailureResponse($response);
    }
}
//...

$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
//...
$this->subject = "First Time User Setup";
$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
如果要更改电子邮件的
主题
,请在启动
->sendFirstTimeSetup()函数之前,覆盖
->AuthController
中的
->subject()
属性:

return $this->postEmail($request);
public function postEmail(Request $request)
{
    return $this->sendResetLinkEmail($request);
}
public function sendResetLinkEmail(Request $request)
{
    $this->validateSendResetLinkEmail($request);

    $broker = $this->getBroker();

    $response = Password::broker($broker)->sendResetLink(
        $this->getSendResetLinkEmailCredentials($request),
        $this->resetEmailBuilder()
    );

    switch ($response) {
        case Password::RESET_LINK_SENT:
            return $this->getSendResetLinkEmailSuccessResponse($response);
        case Password::INVALID_USER:
        default:
            return $this->getSendResetLinkEmailFailureResponse($response);
    }
}
//...

$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
//...
$this->subject = "First Time User Setup";
$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...

我可以继续说下去,但我认为这会让你走上正确的方向。希望它也能帮助其他一些人。

其中一个技巧是了解
Auth
工厂内部的
traits
是如何工作的

首先,我们需要使用
use-illumb\Foundation\Auth\ResetsPasswords特征以及
身份验证和注册用户
节流登录
特征

use AuthenticatesAndRegistersUsers, ThrottlesLogins, ResetsPassword;
接下来,我们需要确保将一个
$request
实例传递给我们的
create
方法:

protected function create(Illuminate\Http\Request $request, array $data)
旁注-我建议不要将
$data
对象作为参数传递,而是使用
$request
。您可以这样获取数据:
$request->get('first-name')
,等等

最后,我们将
$request
传递给
postmail()
函数:

return $this->postEmail($request);
public function postEmail(Request $request)
{
    return $this->sendResetLinkEmail($request);
}
public function sendResetLinkEmail(Request $request)
{
    $this->validateSendResetLinkEmail($request);

    $broker = $this->getBroker();

    $response = Password::broker($broker)->sendResetLink(
        $this->getSendResetLinkEmailCredentials($request),
        $this->resetEmailBuilder()
    );

    switch ($response) {
        case Password::RESET_LINK_SENT:
            return $this->getSendResetLinkEmailSuccessResponse($response);
        case Password::INVALID_USER:
        default:
            return $this->getSendResetLinkEmailFailureResponse($response);
    }
}
//...

$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
//...
$this->subject = "First Time User Setup";
$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
这将通过管道将$request发送到
ResetsPasswords\postmail
函数:

return $this->postEmail($request);
public function postEmail(Request $request)
{
    return $this->sendResetLinkEmail($request);
}
public function sendResetLinkEmail(Request $request)
{
    $this->validateSendResetLinkEmail($request);

    $broker = $this->getBroker();

    $response = Password::broker($broker)->sendResetLink(
        $this->getSendResetLinkEmailCredentials($request),
        $this->resetEmailBuilder()
    );

    switch ($response) {
        case Password::RESET_LINK_SENT:
            return $this->getSendResetLinkEmailSuccessResponse($response);
        case Password::INVALID_USER:
        default:
            return $this->getSendResetLinkEmailFailureResponse($response);
    }
}
//...

$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
//...
$this->subject = "First Time User Setup";
$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
这将通过管道将其连接到
ResetsPasswords\sendResetLinkEmail
功能:

return $this->postEmail($request);
public function postEmail(Request $request)
{
    return $this->sendResetLinkEmail($request);
}
public function sendResetLinkEmail(Request $request)
{
    $this->validateSendResetLinkEmail($request);

    $broker = $this->getBroker();

    $response = Password::broker($broker)->sendResetLink(
        $this->getSendResetLinkEmailCredentials($request),
        $this->resetEmailBuilder()
    );

    switch ($response) {
        case Password::RESET_LINK_SENT:
            return $this->getSendResetLinkEmailSuccessResponse($response);
        case Password::INVALID_USER:
        default:
            return $this->getSendResetLinkEmailFailureResponse($response);
    }
}
//...

$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
//...
$this->subject = "First Time User Setup";
$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
最终会发出一封电子邮件

使整个过程正常工作的关键是
illighted\Http\Request
的实例始终包含
email
字段

注意

sendResetLinkEmail
函数返回的
响应可能与您发送的响应不同。当用户刚刚创建帐户时,可能会被密码重置请求弄糊涂。相反,您可能希望发送一个
首次设置
。为此,您需要创建自己的
密码代理
密码门面

接下来,让我们创建两个新目录:

App\Brokers
App\Facades 
接下来,在
App\Facades
中创建一个新文件,并将其命名为
Password.php
。相应地命名文件的名称空间,并扩展现有密码外观。此外,我们还将添加另一个
常量
,作为
首次设置
的可观察响应类型

<?php

namespace App\Facades;

class Password extends \Illuminate\Support\Facades\Password {
    /**
     * Constant representing a successfully sent reminder.
     *
     * @var string
     */
    const FIRST_TIME_SETUP = 'passwords.first_time_setup';
}
现在我们需要复制前面看到的
sendResetLinkEmail
函数,并将其移动到
AuthController
中。这将允许我们修改我们使用的
密码
外观,并修改
开关
语句以支持我们的
首次设置

public function sendResetLinkEmail(Request $request)
{
    $this->validateSendResetLinkEmail($request);

    $broker = $this->getBroker();

    $response = Password::broker($broker)->sendFirstTimeSetup(
        $this->getSendResetLinkEmailCredentials($request),
        $this->resetEmailBuilder()
    );

    switch ($response) {
        case Password::RESET_LINK_SENT:
            return $this->getSendResetLinkEmailSuccessResponse($response);
        case Password::FIRST_TIME_SETUP:
            return $this->getSendFirstTimeSetupEmailSuccessResponse($response);
        case Password::INVALID_USER:
        default:
            return $this->getSendResetLinkEmailFailureResponse($response);
    }
}
然后,同样在
AuthController
中,我们将创建另一个函数来返回
响应

public function getSendFirstTimeSetupEmailSuccessResponse($response) 
{
    return redirect()->back()->with('status', trans($response));
}
最后,如果要在发送时覆盖函数使用的
视图
,只需在调用
->sendFirstTimeSetup()函数之前覆盖
$broker->emailView
属性即可:

return $this->postEmail($request);
public function postEmail(Request $request)
{
    return $this->sendResetLinkEmail($request);
}
public function sendResetLinkEmail(Request $request)
{
    $this->validateSendResetLinkEmail($request);

    $broker = $this->getBroker();

    $response = Password::broker($broker)->sendResetLink(
        $this->getSendResetLinkEmailCredentials($request),
        $this->resetEmailBuilder()
    );

    switch ($response) {
        case Password::RESET_LINK_SENT:
            return $this->getSendResetLinkEmailSuccessResponse($response);
        case Password::INVALID_USER:
        default:
            return $this->getSendResetLinkEmailFailureResponse($response);
    }
}
//...

$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
//...
$this->subject = "First Time User Setup";
$broker->emailView = "emails.user.first_time_setup";
$response = Password::broker($broker)->sendFirstTimeSetup(
    $this->getSendResetLinkEmailCredentials($request),
    $this->resetEmailBuilder()
);

//...
如果要更改电子邮件的
主题
,请覆盖
->subject()