暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SessionController.php 9.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Mail\ResetPasswordMail;
  4. use App\Models\PasswordReset;
  5. use App\Models\Pelaporan;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Auth;
  8. use Illuminate\Support\Facades\Redirect;
  9. use Illuminate\Support\Facades\Validator;
  10. use App\Models\User;
  11. use Carbon\Carbon;
  12. use Illuminate\Support\Facades\DB;
  13. use Illuminate\Support\Str;
  14. use Illuminate\Support\Facades\Session;
  15. use Illuminate\Support\Facades\Hash;
  16. use Illuminate\Support\Facades\Mail;
  17. use RealRashid\SweetAlert\Facedes\Alert;
  18. class SessionController extends Controller
  19. {
  20. function index(){
  21. $users = User::all();
  22. return view("/Auth/login", compact('users'));
  23. }
  24. public function login(Request $request)
  25. {
  26. // Validasi input dari form
  27. $request->validate([
  28. 'email' => 'required|email',
  29. 'password' => 'required',
  30. ],[
  31. 'name.Required'=>'Name Wajib Diisi',
  32. 'email.Required'=>'Email Wajib Diisi',
  33. 'email.email'=>'Silahkan Masukkan Email Yang Valid',
  34. ]);
  35. $infologin =[
  36. 'email' =>$request->email,
  37. 'password' => $request->password
  38. ];
  39. // Coba melakukan proses autentikasi
  40. if (Auth::attempt($infologin)) {
  41. if (Auth::user()->role == 'admin') { // Menggunakan peran untuk memeriksa apakah pengguna adalah admin
  42. // Jika pengguna adalah admin, redirect ke dashboard admin
  43. return redirect()->route('admin.dashboards')->withSuccess(Auth::user()->name . ' Berhasil Login');
  44. } elseif (Auth::user()->role == 'user') {
  45. // Jika pengguna adalah pengguna biasa, redirect ke dashboard pengguna
  46. return redirect()->route('users.dashboard')->withSuccess(Auth::user()->name . ' Berhasil Login');
  47. }
  48. }else{
  49. // Jika autentikasi gagal, redirect kembali ke halaman login dengan pesan error
  50. return redirect()->route('index.login')->with('error', 'Invalid credentials');
  51. }
  52. }
  53. // public function login(Request $request)
  54. // {
  55. // // Validasi input dari form
  56. // $request->validate([
  57. // 'email' => 'required|email',
  58. // 'password' => 'required',
  59. // ],[
  60. // 'name.required'=>'Name Wajib Diisi',
  61. // 'email.required'=>'Email Wajib Diisi',
  62. // 'email.email'=>'Silahkan Masukkan Email Yang Valid',
  63. // ]);
  64. // $infologin = [
  65. // 'email' => $request->email,
  66. // 'password' => $request->password
  67. // ];
  68. // // Coba melakukan proses autentikasi
  69. // if (Auth::attempt($infologin)) {
  70. // if (Auth::user()->role == 'admin') {
  71. // // Jika pengguna adalah admin, kirim respons JSON dengan informasi berhasil login
  72. // return response()->json(['message' => Auth::user()->name . ' Berhasil Login', 'role' => 'admin']);
  73. // } elseif (Auth::user()->role == 'user') {
  74. // // Jika pengguna adalah pengguna biasa, kirim respons JSON dengan informasi berhasil login
  75. // return response()->json(['message' => Auth::user()->name . ' Berhasil Login', 'role' => 'user']);
  76. // }
  77. // } else {
  78. // // Jika autentikasi gagal, kirim respons JSON dengan informasi credentials invalid
  79. // return response()->json(['error' => 'Invalid credentials'], 401);
  80. // }
  81. // }
  82. public function showRegistrationForm()
  83. {
  84. return view('auth.register');
  85. }
  86. function signup(Request $request){
  87. Session::flash('name', $request->name);
  88. Session::flash('email', $request->email);
  89. if (config('services.recaptcha.key') && env('RECAPTCHA_ENABLED') == true){
  90. $request->validate([
  91. 'name'=>'required',
  92. 'email'=>'required|email|unique:users',
  93. 'password'=> 'required|min:8|confirmed',
  94. 'g-recaptcha-response' =>'required|recaptcha'
  95. ],[
  96. 'name.Required'=>'Name Wajib Diisi',
  97. 'email.Required'=>'Email Wajib Diisi',
  98. 'email.email'=>'Silahkan Masukkan Email Yang Valid',
  99. 'email.unique'=>'Email Sudah Pernah Digunakan, Silahkan Pilih Email Yang Lain',
  100. 'password.Required'=>'Password Wajib Diisi',
  101. 'password.min'=>'Minimum Password Yang Diizinkan 8 Karakter',
  102. 'g-recaptcha-response.recaptcha'=>'Captcha Verification Failed',
  103. 'g-recaptcha-response.required'=>'Please Complete the Captcha',
  104. 'password.confirmed' => 'Konfirmasi password tidak sesuai dengan password',
  105. ]);
  106. }else {
  107. // Jika reCAPTCHA dimatikan, validasi tanpa reCAPTCHA
  108. $request->validate([
  109. 'name'=>'required',
  110. 'email'=>'required|email|unique:users',
  111. 'password'=> 'required|min:8|confirmed',
  112. ],[
  113. 'name.Required'=>'Name Wajib Diisi',
  114. 'email.Required'=>'Email Wajib Diisi',
  115. 'email.email'=>'Silahkan Masukkan Email Yang Valid',
  116. 'email.unique'=>'Email Sudah Pernah Digunakan, Silahkan Pilih Email Yang Lain',
  117. 'password.Required'=>'Password Wajib Diisi',
  118. 'password.min'=>'Minimum Password Yang Diizinkan 8 Karakter',
  119. 'password.confirmed' => 'Konfirmasi password tidak sesuai dengan password',
  120. ]);
  121. }
  122. $data = [
  123. 'name' =>$request->name,
  124. 'email' =>$request->email,
  125. 'password' => Hash::make($request->password)
  126. ];
  127. User::create($data);
  128. $infologin =[
  129. 'email' =>$request->email,
  130. 'password' => $request->password
  131. ];
  132. if(Auth::attempt($infologin)){
  133. // jika otentikasi sukses masuk
  134. return redirect()->route('users.dashboard')->withSuccess(Auth::user()->name . ' Berhasil Login');
  135. }else{
  136. // kalau gagal masuk sini
  137. return redirect('/')->withErrors('Email dan Password Tidak Valid');
  138. }
  139. }
  140. function logout(){
  141. Auth::logout();
  142. return redirect('/')->withSuccess('Berhasil Logout');
  143. }
  144. function forgot(){
  145. return view('auth.forgot-password');
  146. }
  147. public function sendResetLink(Request $request)
  148. {
  149. // Validasi input
  150. $request->validate([
  151. 'email' => 'required|email',
  152. ], [
  153. 'email.required' => 'Email Wajib Diisi',
  154. 'email.email' => 'Silahkan Masukkan Email Yang Valid',
  155. ]);
  156. // Cek apakah email terdaftar dalam database
  157. $user = User::where('email', $request->email)->first();
  158. if ($user) {
  159. // Generate token
  160. $token = Str::random(60);
  161. // Set waktu kadaluarsa token
  162. $expires_at = now()->addMinutes(1); // Token berlaku selama 1 menit
  163. // Simpan token dan waktu kadaluarsa ke dalam tabel password_resets
  164. PasswordReset::updateOrCreate(
  165. ['email' => $request->email],
  166. ['email' => $request->email, 'token' => $token, 'created_at' => now(), 'expires_at' => $expires_at]
  167. );
  168. // Kirim email reset password
  169. Mail::to($user->email)->send(new ResetPasswordMail($token));
  170. return redirect()->route('sendResetLink')->with('success', 'Reset link has been sent to your email.');
  171. } else {
  172. return redirect()->back()->withErrors(['email' => 'Email tidak terdaftar.'])->withInput();
  173. }
  174. }
  175. public function showResetForm($token)
  176. {
  177. // Logika untuk menampilkan halaman reset password dengan menggunakan token
  178. return view('auth.reset', ['token' => $token]);
  179. }
  180. public function resetPassword(Request $request)
  181. {
  182. // Validasi input
  183. $request->validate([
  184. 'password' => 'required|min:8|confirmed',
  185. ],[
  186. 'password.required' => 'Password Harus Diisi',
  187. 'password.min' => 'Minimum Password Yang Diizinkan 8 Karakter',
  188. 'password.confirmed' => 'Konfirmasi password tidak sesuai dengan password',
  189. ]);
  190. // Cek apakah pengguna sudah login
  191. if (Auth::check()) {
  192. // Reset password pengguna yang sudah login
  193. $user = Auth::user();
  194. } else {
  195. // Cek apakah token reset password valid
  196. $token = $request->route('token');
  197. // Anda perlu membuat kolom 'password_resets' jika belum ada
  198. $reset = DB::table('password_resets')->where('token', $token)->first();
  199. if (!$reset) {
  200. return redirect()->route('index.login')->withErrors(['error' => 'Invalid token.']);
  201. }
  202. // Cek apakah token masih berlaku
  203. $tokenCreatedAt = Carbon::parse($reset->created_at);
  204. if (now()->diffInMinutes($tokenCreatedAt) > 1) {
  205. return redirect()->route('index.login')->withErrors(['error' => 'Token expired.']);
  206. }
  207. // Reset password
  208. $user = User::where('email', $reset->email)->first();
  209. if (!$user) {
  210. return redirect()->route('index.login')->withErrors(['error' => 'User not found.']);
  211. }
  212. $user->password = Hash::make($request->password);
  213. $user->save();
  214. // Hapus token reset password yang sudah digunakan
  215. DB::table('password_resets')->where('token', $token)->delete();
  216. }
  217. // Redirect ke halaman login dengan pesan sukses
  218. return redirect()->route('index.login')->with('success', 'Password has been reset successfully.');
  219. }
  220. }