[英]Laravel 6 not require email verification to social login
I am new in laravel.我是laravel的新手。 I have created login and signup form using auth command.
我已经使用 auth 命令创建了登录和注册表单。
I have activated the email verification for login.我已激活登录电子邮件验证。 Also I have created the social login for Gmail,Fb etc. using the socialite based on below link.
此外,我使用基于以下链接的社交名流为 Gmail、Fb 等创建了社交登录。
https://www.tutsmake.com/laravel-6-google-login-tutorial-with-socialite-demo-example/ https://www.tutsmake.com/laravel-6-google-login-tutorial-with-socialite-demo-example/
Now I don't require email verification for those user who login through social but mandatory for manual signup.现在,我不需要对通过社交登录但必须手动注册的用户进行电子邮件验证。
My Homecontroller我的家庭控制器
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(['auth', 'verified']);
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('frontend.index');
}
public function seedr()
{
$users=DB::table('users')->get();
return view('backend.seedr',['users'=>$users]);
}
}
My SocialController我的社交控制器
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Validator,Redirect,Response,File;
use Socialite;
use App\User;
class SocialController extends Controller
{
public function redirect($provider)
{
//echo $provider;die;
return Socialite::driver($provider)->redirect();
}
public function callback($provider)
{
$getInfo = Socialite::driver($provider)->user();
$user = $this->createUser($getInfo,$provider);
auth()->login($user);
return redirect()->to('/home');
}
function createUser($getInfo,$provider){
$user = User::where('provider_id', $getInfo->id)->first();
if (!$user) {
//$mytime = Carbon::now();
$currenttime=date("Y-m-d h:i:s a", time());
$user = User::create([
'name' => $getInfo->name,
'email' => $getInfo->email,
'provider' => $provider,
'provider_id' => $getInfo->id,
]);
//die;
}
return $user;
}
}
You probably have a column email_verified_at
that stores the date when the email address was verified, by default it's null
which means the user is not verified.您可能有一列
email_verified_at
用于存储验证电子邮件地址的日期,默认情况下它为null
,这意味着用户未经过验证。 In your SocialController@createUser
set it to the current date:在您的
SocialController@createUser
中将其设置为当前日期:
$user = User::create([
'name' => $getInfo->name,
'email' => $getInfo->email,
'provider' => $provider,
'provider_id' => $getInfo->id,
'email_verified_at' => now()
]);
Do NOT use it as the @Raftel mentioned!不要像@Raftel 提到的那样使用它! When you add
email_verified_at
to your $fillable
variable, then hacker could break your whole Email Verification by sending a hidden input (eg <input type="hidden" name="email_verified_at" value="<?php echo now() ?>"/ >
...当您将
email_verified_at
添加到$fillable
email_verified_at
变量时,黑客可以通过发送隐藏输入(例如<input type="hidden" name="email_verified_at" value="<?php echo now() ?>"/ >
来破坏您的整个电子邮件验证<input type="hidden" name="email_verified_at" value="<?php echo now() ?>"/ >
...
You can use undocumented method on eloquent models called forceFill()
instead: https://www.mike-griffiths.co.uk/blog/laravels-forcefill-and-forcecreate/您可以在称为
forceFill()
雄辩模型上使用未记录的方法: https : //www.mike-griffiths.co.uk/blog/laravels-forcefill-and-forcecreate/
You can use markEmailAsVerified()您可以使用 markEmailAsVerified()
$user = User::create([
'name' => $getInfo->name,
'email' => $getInfo->email,
'provider' => $provider,
'provider_id' => $getInfo->id,
]);
$user->markEmailAsVerified();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.