在Laravel中插入数据并登录

时间:2018-10-08 11:42:18

标签: php laravel

我正在laravel中完成一份申请表,其中有一份作业。我想用电子邮件,mobileNo,customerId等提交申请表。

我想要的是将表单数据插入到用户表中,然后用户将使用自动生成的密码登录并重定向到客户的仪表板。模态将打开,并要求添加密码。

另一方面,还有一个登录页面,用户可以从中正常登录。登录功能正常运行。

有人可以帮助我实现上述功能吗?预先感谢。

**数据为:**

email='user@gmail.com'

mobile ='9875425698'

customerId ='CI10001';

ApplicationForm控制器,我在哪里成功获取数据

class ApplicationForm extends Controller
{
    public function saveApplicationForm(Request $request){
      return $request;
    }
}

2 个答案:

答案 0 :(得分:1)

通过提交表单添加用户

$password = bcrypt('secret'); //add here random password

$user = new User();
$user->email = 'xyz@gmail.com';
$user->mobileNo = '123456789';
$user->customerId = '1245';
$user->password = $password;  
$user->save();

在您通过用户名(无需密码)插入用户表登录名上的原始数据之后

Auth::loginUsingId($user->id);
Auth::loginUsingId($user->id,true); // Login and "remember" the given user...

通过其他方式使用电子邮件和密码登录

Auth::attempt(['email' => $user->email, 'password' => $password], $remember);
  

所有动作都只能用一种方法(动作)

答案 1 :(得分:0)

我的评论如下:

在RegisterController(App \ Http \ Controllers \ Auth)中

protected function create(array $data)
{

    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'institution' => $data['institution'],
        'password' => 'NOT_SET',
    ]);
}

然后创建一个中间件(例如php artisan make:middleware Must_have_password)

namespace App\Http\Middleware;

use Closure;
use Auth;

class Must_have_password
{
    /**
     * Verify if password is set, otherwise redirect to password-set page.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $user = Auth::user();

        if ($user && $user->password !== 'NOT_SET') {
            return $next($request);
        }

        else return redirect('/set-password');
    }
}

当然,您接下来需要创建一个密码设置视图并将其挂接到/ set-password路由。正如我在评论中说的,您要确保/ set-password路由受到良好的保护,因为您不希望人们以这种方式劫持帐户。这种方法(使用NOT_SET)的好处是,如果人们最初不使用password_reset基础结构,则始终可以使用password_reset基础结构来重置其密码。

这有点hacky,但是由于Laravel总是对密码进行加密,因此无法以其他方式将值变成NOT_SET。另外,您可以在用户模型中添加一个布尔值(类似于Must_Reset),该布尔值将重定向到密码重置页面。

您还可以连接Laravel的密码重置功能,查找“一次性密码Laravel”(例如here)。