我正在laravel中完成一份申请表,其中有一份作业。我想用电子邮件,mobileNo,customerId等提交申请表。
我想要的是将表单数据插入到用户表中,然后用户将使用自动生成的密码登录并重定向到客户的仪表板。模态将打开,并要求添加密码。
另一方面,还有一个登录页面,用户可以从中正常登录。登录功能正常运行。
有人可以帮助我实现上述功能吗?预先感谢。
**数据为:**
email='user@gmail.com'
mobile ='9875425698'
customerId ='CI10001';
ApplicationForm控制器,我在哪里成功获取数据
class ApplicationForm extends Controller
{
public function saveApplicationForm(Request $request){
return $request;
}
}
答案 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)。