142 lines
4.1 KiB
PHP
142 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Member;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Laravel\Socialite\Facades\Socialite;
|
|
use Log;
|
|
use session;
|
|
|
|
class LoginController extends Controller
|
|
{
|
|
public $redirectTo = '';
|
|
//
|
|
public function index(Request $request)
|
|
{
|
|
return view('front.login');
|
|
}
|
|
|
|
public function adminIndex(Request $request)
|
|
{
|
|
return view('admin.login');
|
|
}
|
|
|
|
/** line 跳轉 由line登入
|
|
* @return [type]
|
|
*/
|
|
public function redirectToProvider(Request $request)
|
|
{
|
|
$redirectTo = $request->is('admin/*') ? 'admin' : 'member';
|
|
session(['redirect_to' => $redirectTo]); // 将值存入 Session
|
|
return Socialite::driver('line')->redirect();
|
|
}
|
|
|
|
/**
|
|
* Summary of handleProviderCallback
|
|
* line 登入後查詢
|
|
* @return void
|
|
*/
|
|
public function handleProviderCallback(Request $request)
|
|
{
|
|
// 从 Session 获取 $redirectTo
|
|
$redirectTo = session('redirect_to', 'member');
|
|
|
|
$user = Socialite::driver('line')->user();
|
|
Log::info('line', ['user' => $user]);
|
|
$lineId = $user->getId();
|
|
$name = $user->getName();
|
|
$avatar = $user->getAvatar() ?? '';
|
|
$email = $user->getEmail() ?? '';
|
|
|
|
Log::info('email', [$email]);
|
|
|
|
if ($redirectTo == 'admin') {
|
|
// Admin 登录逻辑
|
|
$existingUser = $user = User::where('line_id', $lineId)
|
|
->orWhere('email', $email)
|
|
->first();
|
|
|
|
if ($existingUser) {
|
|
Auth::guard('web')->login($existingUser);
|
|
} else {
|
|
$newUser = User::create([
|
|
'name' => $name,
|
|
'line_id' => $lineId,
|
|
'password' => bcrypt(env('DEFAULT_PASSWORD')),
|
|
'avatar' => $avatar,
|
|
'source' => 'cafeg',
|
|
'email' => $email,
|
|
]);
|
|
Auth::guard('web')->login($newUser);
|
|
}
|
|
|
|
$user = Auth::guard('web')->user();
|
|
return $user->email
|
|
? redirect()->route('admin.index')
|
|
: redirect()->route('admin.profile');
|
|
} else {
|
|
// Member 登录逻辑
|
|
$existingUser = Member::where('line_id', $lineId)
|
|
->orWhere('email', $email)
|
|
->first();
|
|
if ($existingUser) {
|
|
Auth::guard('member')->login($existingUser);
|
|
} else {
|
|
$newUser = Member::create([
|
|
'name' => $name,
|
|
'line_id' => $lineId,
|
|
'password' => bcrypt(env('DEFAULT_PASSWORD')),
|
|
'avatar' => $avatar,
|
|
'source' => 'cafeg',
|
|
'email' => $email,
|
|
]);
|
|
Auth::guard('member')->login($newUser);
|
|
}
|
|
|
|
$user = Auth::guard('member')->user();
|
|
return $user->email
|
|
? redirect()->route('member.index')
|
|
: redirect()->route('member.profile');
|
|
}
|
|
}
|
|
|
|
public function adminLogout()
|
|
{
|
|
Auth::guard('web')->logout();
|
|
return redirect()->route('admin.login');
|
|
}
|
|
|
|
public function memberLogout()
|
|
{
|
|
Auth::guard('member')->logout();
|
|
return redirect()->route('front.login.view');
|
|
}
|
|
|
|
public function adminNormalLogin(Request $request)
|
|
{
|
|
|
|
$credentials = $request->only('email', 'password');
|
|
|
|
if (Auth::guard('web')->attempt($credentials)) {
|
|
return redirect()->route('admin.index');
|
|
}
|
|
return redirect()->route('admin.login');
|
|
}
|
|
|
|
public function memberNormalLogin(Request $request)
|
|
{
|
|
$credentials = $request->only('email', 'password');
|
|
|
|
if (Auth::guard('member')->attempt($credentials)) {
|
|
return redirect()->route('member.index');
|
|
} else {
|
|
|
|
return redirect()->route('front.login.view')->with('error', '帳號密碼錯誤');
|
|
}
|
|
}
|
|
}
|