laravel, duplicate email login via google

karena sebelumnya sudah registrasi manual pake email abcd@gmail.com, terus login via google pake akun dg email abcd@gmail.com otomatis duplicate, gimana ya caranya biar sekedar update ketika status email sudah ada didatabase dan insert ketika status masih kosong, khusus di laravel. mohon pencerahan

avatar hendroprazetyo
@hendroprazetyo

16 Kontribusi 0 Poin

Diperbarui 5 tahun yang lalu

7 Jawaban:

Bisa pake method -&gt;exists() yang ada di laravel untuk cek apakah ada data yang sesuai query-nya atau tidak, Contoh: <pre> if(User::where('email', $request-&gt;email)-&gt;exists()) { User::update([ //isi sendiri ]) } else { User::create([ //isi sendiri ]) } </pre>

avatar human
@human

45 Kontribusi 41 Poin

Dipost 5 tahun yang lalu

Kang Hilman itu code saya bdw masih ada error, bisa mohon koreksi bantuannya kang <pre> class LoginController extends Controller { /* |-------------------------------------------------------------------------- | Login Controller |-------------------------------------------------------------------------- | | This controller handles authenticating users for the application and | redirecting them to your home screen. The controller uses a trait | to conveniently provide its functionality to your applications. | */

use AuthenticatesUsers;

/**
 * Where to redirect users after login.
 *
 * @var string
 */
protected $redirectTo = &#039;/home&#039;;

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this-&amp;gt;middleware(&#039;guest&#039;)-&amp;gt;except(&#039;logout&#039;);
}

public function redirectToProvider($provider)
{
    return Socialite::driver($provider)-&amp;gt;redirect();
}

public function handleProviderCallback($provider)
{
    $user = Socialite::driver($provider)-&amp;gt;stateless()-&amp;gt;user();
    $authUser = $this-&amp;gt;findOrCreateUser($user, $provider);
    Auth::login($authUser, true);
    return redirect($this-&amp;gt;redirectTo);
}

public function findOrCreateUser($user, $request)
{
    // $authUser = User::where(&#039;provider_id&#039;,$user-&amp;gt;id)-&amp;gt;first();
    // if ($authUser) {
    //     return $authUser;
    // }

    if(User::where(&#039;email&#039;, $request-&amp;gt;email)-&amp;gt;exists()) {
        User::update([
            &#039;name&#039; =&amp;gt; $user-&amp;gt;name,
            &#039;email&#039; =&amp;gt; $user-&amp;gt;email,
            &#039;provider&#039; =&amp;gt; strtoupper($provider),
            &#039;provider_id&#039; =&amp;gt; $user-&amp;gt;id
        ]);
    }
    else {
        User::create([
            &#039;name&#039; =&amp;gt; $user-&amp;gt;name,
            &#039;email&#039; =&amp;gt; $user-&amp;gt;email,
            &#039;provider&#039; =&amp;gt; strtoupper($provider),
            &#039;provider_id&#039; =&amp;gt; $user-&amp;gt;id
        ]);
    }

    // return User::create([
    //     &#039;name&#039; =&amp;gt; $user-&amp;gt;name,
    //     &#039;email&#039; =&amp;gt; $user-&amp;gt;email,
    //     &#039;provider&#039; =&amp;gt; strtoupper($provider),
    //     &#039;provider_id&#039; =&amp;gt; $user-&amp;gt;id
    // ]);
}

} </pre>

avatar hendroprazetyo
@hendroprazetyo

16 Kontribusi 0 Poin

Dipost 5 tahun yang lalu

Error-nya apa? findOrCreateUser(Request $request) harusnya kalau emang ada parameter di urlnya findOrCreateUser(Request $request, $user)

avatar human
@human

45 Kontribusi 41 Poin

Dipost 5 tahun yang lalu

ini update codenya masih error tapi, erronya tuh = ErrorException (E_DEPRECATED) Non-static method Illuminate\Database\Eloquent\Model::update() should not be called statically <pre> &lt;?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Socialite; use Auth; use App\User;

class LoginController extends Controller { /* |-------------------------------------------------------------------------- | Login Controller |-------------------------------------------------------------------------- | | This controller handles authenticating users for the application and | redirecting them to your home screen. The controller uses a trait | to conveniently provide its functionality to your applications. | */

use AuthenticatesUsers;

/**
 * Where to redirect users after login.
 *
 * @var string
 */
protected $redirectTo = &#039;/home&#039;;

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this-&amp;gt;middleware(&#039;guest&#039;)-&amp;gt;except(&#039;logout&#039;);
}

public function redirectToProvider($provider)
{
    return Socialite::driver($provider)-&amp;gt;redirect();
}

public function handleProviderCallback($provider)
{
    $user = Socialite::driver($provider)-&amp;gt;stateless()-&amp;gt;user();
    $authUser = $this-&amp;gt;findOrCreateUser($user, $provider);
    Auth::login($authUser, true);
    return redirect($this-&amp;gt;redirectTo);
}

public function findOrCreateUser($user, $provider)
{
    // $authUser = User::where(&#039;provider_id&#039;,$user-&amp;gt;id)-&amp;gt;first();
    // if ($authUser) {
    //     return $authUser;
    // }

    $authUser = User::where(&#039;email&#039;, $user-&amp;gt;email)-&amp;gt;exists();
    if ($authUser) {
        User::update([
            &#039;name&#039; =&amp;gt; $user-&amp;gt;name,
            &#039;email&#039; =&amp;gt; $user-&amp;gt;email,
            &#039;provider&#039; =&amp;gt; strtoupper($provider),
            &#039;provider_id&#039; =&amp;gt; $user-&amp;gt;id
        ]);
        $user-&amp;gt;save();
    }
    else {
        User::create([
            &#039;name&#039; =&amp;gt; $user-&amp;gt;name,
            &#039;email&#039; =&amp;gt; $user-&amp;gt;email,
            &#039;provider&#039; =&amp;gt; strtoupper($provider),
            &#039;provider_id&#039; =&amp;gt; $user-&amp;gt;id
        ]);
    }

    // return User::create([
    //     &#039;name&#039; =&amp;gt; $user-&amp;gt;name,
    //     &#039;email&#039; =&amp;gt; $user-&amp;gt;email,
    //     &#039;provider&#039; =&amp;gt; strtoupper($provider),
    //     &#039;provider_id&#039; =&amp;gt; $user-&amp;gt;id
    // ]);
}

} </pre>

avatar hendroprazetyo
@hendroprazetyo

16 Kontribusi 0 Poin

Dipost 5 tahun yang lalu

how ? mas hilman kalau udah cek bantu mas ya hehe stuck asli :D

avatar hendroprazetyo
@hendroprazetyo

16 Kontribusi 0 Poin

Dipost 5 tahun yang lalu

Itu yang update ga spesifik mau update apa, kalau mau gini: <pre> $user = User::where('email', $user-&gt;email); if($user-&gt;exists()){ $user-&gt;update([ 'name' =&gt; $user-&gt;name, 'email' =&gt; $user-&gt;email, 'provider' =&gt; strtoupper($provider), 'provider_id' =&gt; $user-&gt;id ]) } </pre> *Kalau pakai -&gt;update() ga usah pake -&gt;save()

avatar human
@human

45 Kontribusi 41 Poin

Dipost 5 tahun yang lalu

iya sudah solved, thank u

avatar hendroprazetyo
@hendroprazetyo

16 Kontribusi 0 Poin

Dipost 5 tahun yang lalu

Login untuk ikut Jawaban