Laravel Route Redirection Problems - php

I'm having problem redirecting my admin page to a Route::resource(); so that I could display my CRUD from the BookController
What am I doing wrong?
This is my AdminLoginController:
public function __construct(){
$this->middleware('guest:admin');
}
public function showLoginForm(){
return view('auth.admin-login');
}
public function login(Request $request){
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|min:6'
]);
if(Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password],$request->remember)){
return redirect()->intended(route('books.index'));
}
return redirect()->back()->withInput($request->only('email','remember'));
}
BookController
public function index()
{
$books = Book::orderBy('id','desc')->paginate(3);
return view('books.index')->withBooks($books);
}
web.php
Route::prefix('admin')->group(function(){
Route::get('/login','Auth\AdminLoginController#showLoginForm')>name('admin.login');
Route::post('/login','Auth\AdminLoginController#login')>name('admin.login.submit');
Route::get('/books/','BookController#index');
});

I think you should update your books route:
Route::get('/books/','BookController#index')->name('books.index');
OR
Route::group(['prefix' => 'admin'], function () {
Route::resource('/books','BookController#index');
});
and check your route name in php artisan route:list
update your code like:
if(Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password],$request->remember)){
return redirect()->intended(route('admin.books.index'));
}
Hope this work for you!

Related

how to auto login after successfully registered in laravel 5.4.12?

i want to make an auto login after successful registration and redirect to Edit Profile page.. I tried the following code but not working as i want
class RegisterController extends Controller
{
use RegistersUsers;
protected $redirectTo = '/edit_profile';
public function __construct()
{
$this->middleware('guest');
}
public function createUser(Request $request)
{
$this->validate($request , [
'firstName' => 'required',
'lastName' => 'required',
'displayName' => 'required',
'email' => 'required |email',
'password' =>'required ',
'gender' =>'required',
'day' =>'required|max:2',
'month' =>'required|max:2',
'year' =>'required|max:4',
]);
$email=$request->input('email');
$password=$request->input('paasword');
$dob=$request->input('day').'-'.$request->input('month').'-'.$request->input('year');
$request->request->add(['dob'=>$dob]);
$request->request->add(['password'=>bcrypt($request->input('password'))]);
$data = User::create($request->except(['_token', 'submit', 'day','month','year', 'confirm_password' ,'dayInWeek']));
Auth::login($data);
}
}
Routes
Route::get('/', 'PageController#login');
Route::get('/home', 'HomeController#index');
Route::group( ['middleware' => 'auth' ], function()
{
Route::get('main', 'PageController#main');
Route::get('browse', 'PageController#browse');
Route::get('pickngo', 'PageController#pickngo');
Route::get('edit_profile', 'PageController#profile');
}
Use Laravel loginUsingId($id) function by passing the user id.
$data = User::create($request->except(['_token', 'submit', 'day','month','year', 'confirm_password' ,'dayInWeek']));
Auth::loginUsingId($data->id);
just modify your auth login just like
if(Auth::login($data)) {
return redirect('/edit_profile');
}
else
{
return redirect()->back();
}
Scren from documentation.
You just need to add after login redirectTo property or method inside your LoginController.
P.S.it will work if you're using laravel's make:auth.

Login don't work on laravel 5.2

I have working on a application that i don't develop. However i have basic knowledge on laravel.
I have the application, and the login worked days ago till i edit the routes.php and stop working.
Actually i verify the parameters (user, password), and they are right, the parameters are the same, but the login does not redirect me to the main page.
I put the LogController.php
public function store(LoginRequest $request)
{
if(Auth::attempt(['user' => $request['user'], 'password' => $request['password'], 'perfil' => 2]))
{
Dashboard::insertGetId(['user' => $request['user'], 'perfil' => '2']);
return Redirect::to('administrator');
}elseif (Auth::attempt(['user' => $request['user'], 'password' => $request['password'], 'perfil' => 1])) {
# code...
return Redirect::to('portal-empleado');
}else {
# code...
Session::flash('error_message', $request['password']);
return Redirect::to('login');
}
}
routes.php
Route::get('logout', ['as' => 'logout', 'uses' => 'Auth\AuthController#getLogout']); //Finalizar sesion
Route::resource('login','LogController');
Route::get('/', function (){return view('content');});
Route::get('Quienes-Somos',['uses' => 'HomeController#qs_index','as'=> 'Who_we_are']);
Route::get('Normatividad',['uses' => 'HomeController#n_index','as'=> 'regulations']);
Route::get('Servicios',['uses' => 'HomeController#s_index','as'=> 'services']);
Route::POST('Contacto',['uses' => 'ContactController#store','as'=> 'contact']);
Route::group(['middleware' => 'auth'], function ()
{
Route::get('portal-empleado',['uses' => 'EmployeeController#index','as'=> 'portal-empleado']);
Route::get('nomina_index', 'PayrollController#view_date_generation_payroll');
Route::POST('nomina', 'PayrollController#store');
Route::get('pdfPayroll', 'PayrollController#pdfPayroll');
Route::get('seguridad_social', function (){return view('modules.employee.social_security_certificate.index');});
Route::get('certificado', 'WorkcertificateController#Contract');
Route::resource('curriculum_vitae','CurriculumController');
Route::resource('contractregistre','ContractregistreController');
Route::get('administrator', function (){return view('administrator.dashboard');});
Route::get('view_certificate', function (){return view('administrator.view.viewcertificate');});
Route::get('view_payroll', function (){return view('administrator.view.viewpayroll');});
Route::resource('administrator','DashboardController');
Route::get('viewcertificate', 'WorkcertificateController#viewcertificate');
Route::get('editviewcertificate/{value}',['as' => 'editviewcertificate','uses' => 'WorkcertificateController#editviewcertificate']);
Route::get('viewpayroll', 'PayrollController#viewpayroll');
Route::get('FilterviewPayroll/{value}',['as' => 'FilterviewPayroll','uses' => 'PayrollController#FilterviewPayroll']);
//Route::get('help', function (){return view('components.help.index');});
//Route::get('Instrucciones', function(){return view('components.help.index');});
Route::get('portal', function(){return view('modules.services.portal');});
Route::get('view_Contract', 'WorkcertificateController#Contract');
});
/* Imports*/
Route::get('import_contracts', 'ImportController#index_contracts');
Route::post('cargar_datos_contratos', 'ImportController#cargar_datos_contratos');
Route::get('import_payrolls', 'ImportController#index_payrolls');
Route::post('cargar_datos_payrolls', 'ImportController#cargar_datos_payrolls');
Route::get("user_mig", function()
{
temporalestla\User::truncate();
set_time_limit(3200);
$contr = temporalestla\ContractUser::all();
foreach ($contr as $value)
{
$psw = \Hash::make($value->id_employee);
$user = new temporalestla\User
([
"full_name"=>$value->name_used,
"user" => $value->id_employee,
"password" => $psw,
"perfil" => 1
]);
//dd($user);
$user->save();
}
return "Proceso finalizado.";
});
And the RedirectIfAuthenticated.php
class RedirectIfAuthenticated
{
protected $auth;
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
public function handle($request, Closure $next)
{
if ($this->auth->check()) {
return redirect('/');
}
return $next($request);
}
}
If someone could help me i'll be eternally grateful.
The error that i have was a database error. However, I had a parse error in my RedirectIfAuthenticated where there was a return mixed, it's fixed now, thanks to all of you.

How to make custom auth in laravel 5.3

I'm facing problem in my Laravel 5.3 custom auth want to use my own functions or pages when I check Auth::check() it returns false.
Here is User controller:
namespace App\Http\Controllers;
use App\User;
use Illuminate\Support\Facades\Session;
use validatior;
use Auth;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function postSignUp(Request $request)
{
$validation = \Validator::make($request->all(), [
'email' => 'email|required|unique:users',
'password' => 'required|min:4'
]);
if ($validation->fails()) {
return redirect()->back()->withErrors($validation->errors());
} else {
$user = new User();
$user->email = $request->get("email");
$user->password = bcrypt($request->get['password']);
$user->save();
}
return redirect('signupPage');
}
public function postSignIn(Request $request)
{
$this->validate($request, [
'email' => 'required',
'password' => 'required',
]);
if (Auth::attempt(['email' => $request['email'], 'password' => $request['password']])) {
return redirect('users/profile');
}
dd(Auth::check());
exit;
}
}
After sign in I want to redirect at profile page but my condition is not working. My routes are:
Route::group(['prefix' => 'users'], function(){
Route::group(['middleware' => 'guest'], function(){
Route::get('/signupPage','UserController#getSignUp');
Route::post('/register',array ('as'=>'signup', 'uses' =>'UserController#postSignUp', ));
Route::get('signInPage', array('as' => 'signInPage', 'uses' => 'UserController#getSignIn'));
Route::post('/postLogin', array('as' => 'postLogin', 'uses' => 'UserController#postSignIn'));
});
Route::group(['middleware' => 'auth'], function(){
Route::get('/profile', array('as' => 'profile', 'uses' => 'UserController#getProfile'));
Route::get('/logout', array('as'=>'logout', 'uses'=> 'UserController#logout'));
});
});
Here are some Modifications of your code
public function postSignUp(Request $request)
{
$email = $request->input('email');
$pass = $request->input('password');
$validation = \Validator::make($request->all(), [
'email' => 'email|required|unique:users',
'password' => 'required|min:4'
]);
if ($validation->fails()) {
return redirect()->back()->withErrors($validation->errors());
} else {
$pas = bcrypt($pass);
$user = new User();
$user->email = $email;
$user->password = $pas;
$user->save();
}
return redirect('users/signInPage');
}
Do use bcrypt while registering your User as this function is by default used by Auth Attempt function
public function postSignIn(Request $request)
{
$this->validate($request, [
'email' => 'required',
'password' => 'required',
]);
$email= $request->input['email'];
$password= $request->input['password'];
if (Auth::attempt(['email'=>$email,'password'=>$password']))
{
return redirect('users/profile');
}
return redirect('users/signInPage')->withErrors(['failure' => 'The credentials you entered did not match our records. Try again!',]);
}
finally this will give you too many redirects error as you using default middlewares, because your logic is now differ from the default one that's why you have to write your custom middleware, for this run this command
php artisan make:middleware CutomAuth
this will create your custom middleware now write code in it by your logic and after registering in app/Http/Kernel.php as \n
'customauth' => \Illuminate\Auth\Middleware\CutomAuth::class, you are good to go

laravel 5.2 - Auth::user()->username is empty

If I use Auth::user()->username in a Blade file laravel returns me an empty String but Auth::user()->email is filled. I use my own AuthController and my Login,Register and Logout work perfectly but I can't get the username.
Routes.php
<?php
Route::group(['middleware' => ['web']] , function () {
Route::get('/', function () {
return view('welcome');
})->name('home');
});
Route::group(['middleware' => ['web','guest']], function () {
Route::auth();
#Sign up Routes
Route::get('/signup', function () {
return view('auth.signup');
})->name('auth.signup');
Route::post('/signup', 'AuthController#signup');
#Sign in Routes
Route::get('/signin', function () {
return view('auth.signin');
})->name('auth.signin');
Route::post('/signin', 'AuthController#signin');
});
Route::group(['middleware' => ['web','auth']], function () {
Route::auth();
#Sign out Routes
Route::get('/signout', 'AuthController#signout')->name('auth.signout');
});
And my custom Auth Controller is:
<?php
namespace App\Http\Controllers;
use Auth;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\User;
class AuthController extends Controller
{
public function signup(Request $request) {
$this->validate($request, [
'email' => 'required|unique:users|email|max:255',
'username' => 'required|unique:users|alpha_dash|min:2|max:20',
'password' => 'required|min:6'
]);
User::create([
'email' => $request->input('email'),
'username' => $request->input('username'),
'password' => bcrypt($request->input('password')),
]);
return redirect()->route('home');
}
public function signin(Request $request) {
$this->validate($request, [
'email' => 'required',
'password' => 'required'
]);
if(!Auth::attempt($request->only(['email', 'password']), $request->has('remember'))) {
return redirect()->back()->with('flash-message','We can not sign you in with this data!');
}
return redirect()->route('home');
}
public function signout() {
Auth::logout();
return redirect()->route('home');
}
}
Maybe someone can help me
.
Note:
I added the username into User.php under the filled array.
Most likely you are missing username in $fillable of your User model.
The create method only accept fields coming from $fillable.
Please edit your User model like this:
protected $fillable = [
'email', 'username', 'password',
];
Only $fillable fields insert by Create method.

Access control to different users - Laravel 5.2

In my app I have two types of users - admin and teacher. In my AuthController I have this :
public function getLogin() {
return view('auth.login');
}
public function postLogin(\Illuminate\Http\Request $request) {
if(Auth::attempt([
'username' => $request->input('username'),
'password' => $request->input('password'),
'type' => 'admin'
])) {
return redirect ('admin');
}
if(Auth::attempt([
'username' => $request->input('username'),
'password' => $request->input('password'),
'type' => 'teacher'
])) {
return redirect ('educator/account');
}
return redirect('login')->with('message', [
'type' => 'danger',
'message' => 'Грешно потребителско име или парола!'
]);
}
public function getLogout() {
Auth::logout();
return redirect('login');
}
But when I'm logged in as a user with type teacher if i go to http://localhost/school_system/public/admin I automatically go to the admin panel without asking for username and password. I want if I want to go to the admin panel from the teacher account this to happen with asking for username and password, how can I make this?
My routes:
Route::group(['middleware' => ['auth']
], function () {
Route::group([
'prefix' => 'admin',
'namespace' => 'Admin'
], function () {
Route::controller('student', 'StudentsController');
Route::controller('profile', 'ProfilesController');
Route::controller('class', 'ClassesController');
Route::controller('subjects', 'SubjectsController');
Route::controller('teacher', 'TeachersController');
Route::controller('marktype', 'MarkTypeController');
Route::controller('rules', 'RuleController');
Route::get('{slug?}', 'PageController#getView');
});
});
Route::group(['middleware' => ['auth']
], function () {
Route::group([
'prefix' => 'educator',
'namespace' => 'Educator'
], function () {
Route::controller('account', 'AccountController');
Route::get('{slug?}', 'EducatorController#getView');
});
});
Thanks ^^
You can create an "adminmiddleware" : php artisan make:middleware AdminMiddleware
Example of code you can use
if ($request->user()->type != 'admin')
{
return redirect('home');
}
and in the route:
Route::group(['middleware' => ['admin']...
Finished ;)

Categories